Перейти к содержимому


Фотография
- - - - -

curl и multi

curl

Сообщений в теме: 4

#1 CB9TOIIIA

CB9TOIIIA

Отправлено 22 July 2016 - 13:05

Всем привет! Вопрос возник по curl... какое-то странное поведение.

 

В общем есть код:

	 	public static function open_httppost($url, $method = 'curl')
	 	{
	 		if($method == 'curl' && function_exists('curl_init'))
	 		{
	 			$ch = curl_init();
	 			curl_setopt($ch, CURLOPT_URL, $url);
	 			curl_setopt($ch, CURLOPT_POST, true);
	 			curl_setopt($ch, CURLOPT_HEADER, 0);
	 			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	 			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	 			$result = curl_exec($ch);
	 			curl_close($ch);
	 		}
	 		else
	 		{
	 			$result = file_get_contents($url);
	 		}

	 		return $result;
	 	}

и


$datalistPosts = [
  'forum' => $disqusapishort,
  'thread' => 'link:'.$urllistPosts,
  'api_key' => $disqusapipublic
 ];
$url = 'https://disqus.com/api/3.0/threads/listPosts.json?'. http_build_query($datalistPosts,null,'&');

if (!empty($urllistPosts)) {
  $responce = MyjbzoostatHelper::open_http($url, $method);
  $listPosts = json_decode($responce, true);
  if ($listPosts['code'] == 13) {
    echo "<p class='bg-danger' align='center'><small>Превышен лимит Disqus, необходимо немного подождать.</small></p>";
  }
  else {
    jbdump($listPosts,0,'$listPosts');
  }
}
else {
    echo "<p class='bg-danger' align='center'><small>Введите ссылку сайта, чтобы узнать детальную информацию Disqus.</small></p>";
}

Все отлично работает. в jbdump отлично смотрится. Но вот при мульте:


	 	public static function open_multi($url)
	 	{
	 		if(function_exists('curl_init'))
	 		{
				// create both cURL resources
			$ch1 = curl_init();
			$ch2 = curl_init();
			// $ch3 = curl_init();
			// $ch4 = curl_init();
			// $ch5 = curl_init();

			// set URL and other appropriate options
			curl_setopt($ch1, CURLOPT_URL, $url);
			curl_setopt($ch1, CURLOPT_HEADER, 0);
			curl_setopt($ch2, CURLOPT_URL, $url);
			curl_setopt($ch2, CURLOPT_HEADER, 0);
			// curl_setopt($ch3, CURLOPT_URL, $url);
			// curl_setopt($ch3, CURLOPT_HEADER, 0);
			// curl_setopt($ch4, CURLOPT_URL, $url);
			// curl_setopt($ch4, CURLOPT_HEADER, 0);
			// curl_setopt($ch5, CURLOPT_URL, $url);
			// curl_setopt($ch5, CURLOPT_HEADER, 0);

			//create the multiple cURL handle
			$mh = curl_multi_init();

			//add the two handles
			curl_multi_add_handle($mh,$ch1);
			curl_multi_add_handle($mh,$ch2);
			// curl_multi_add_handle($mh,$ch3);
			// curl_multi_add_handle($mh,$ch4);
			// curl_multi_add_handle($mh,$ch5);

			$active = null;
			//execute the handles
			do {
			    $mrc = curl_multi_exec($mh, $active);
			} while ($mrc == CURLM_CALL_MULTI_PERFORM);

			while ($active && $mrc == CURLM_OK) {
			    if (curl_multi_select($mh) != -1) {
			        do {
			            $mrc = curl_multi_exec($mh, $active);
			        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
			    }
			}

			//close the handles
			curl_multi_remove_handle($mh, $ch1);
			curl_multi_remove_handle($mh, $ch2);
			// curl_multi_remove_handle($mh, $ch3);
			// curl_multi_remove_handle($mh, $ch4);
			// curl_multi_remove_handle($mh, $ch5);
			$result  = $mrc;
                        curl_multi_close($mh);

	 		}

	 		return $result;
	 	}

и так:

//код


$responce = MyjbzoostatHelper::open_multi($url);
$blacklist = json_decode($responce, true);
if ($blacklist['code'] == 13) {
  echo "<p class='bg-danger' align='center'><small>Превышен лимит Disqus, необходимо немного подождать.</small></p>";
}
else {
  jbdump($blacklist,0,'$blacklist');
}

все просто вываливается:

 

0_a61b8_883cf62f_orig.png

 

Большие подозрения - что я в мульти намудрил. Как-то не присвоил значение чтоли...


  • 0

#2 SmetDenis

SmetDenis

Отправлено 22 July 2016 - 13:15

Не надо так...

 

Есть более гуманные методы

$httpClient = JHttpFactory::getHttp();
$response = $httpClient->post($url, $data, $headers);
var_dump($response);

  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 CB9TOIIIA

CB9TOIIIA

Отправлено 22 July 2016 - 13:38

Не надо так...
 
Есть более гуманные методы

$httpClient = JHttpFactory::getHttp();
$response = $httpClient->post($url, $data, $headers);
var_dump($response);

 
Хм... как интересно

$httpClient = JHttpFactory::getHttp();
jbdump($httpClient,0,'$httpClient');
$response = $httpClient->get($url,null,null);
//в ответе все есть. 80 объектов
//но если далее
$blacklist = json_decode($responce, true);
// только какое-то 1 значение (не то, что надо).
$httpClient = JHttpFactory::getHttp();
jbdump($httpClient,0,'$httpClient');
$responce = $httpClient->get($url, null , null);
$responce = $responce->body;
$blacklist = json_decode($responce, true);

O0  пашет, но мульти не проверял еще.


Сообщение отредактировал CB9TOIIIA: 22 July 2016 - 13:46

  • 0

#4 SmetDenis

SmetDenis

Отправлено 22 July 2016 - 13:56

$responce->body

Да, именно так получается тело ответа.

Там еще есть code и headers

 

$httpClient->get($url, null , null);

Можно оставить только первый аргумент, остальные не обязательные.

 

пашет, но мульти не проверял еще.

Зачем нужен мульти? 


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 CB9TOIIIA

CB9TOIIIA

Отправлено 22 July 2016 - 14:01

Мульти - бан лист от дискуса получить - там лимит 100 - в бане Дофига людей
  • 0




Click to return to top of page in style!