curl — может curl_exec () возвращать частичные результаты?

Я использую встроенные в PHP функции cURL для выполнения некоторых запросов и захвата заголовков (для конкретной цели отображения заголовков). Обычно это работает хорошо. я имею curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); установите так, чтобы перенаправления следовали, и в конце будут группы заголовков для каждого сделанного HTTP-запроса, включая все перенаправления.

Проблема в том, что иногда редирект будет «устаревшим» и будет указывать на домен, который больше не существует. В этом случае, curl_exec( ) выдает ошибку и не возвращает данных.

Однако в моем конкретном использовании здесь, это было бы очень полезно для curl_exec( ) возвращать «все, что у него так далеко» при ошибке, чтобы я мог хотя бы показать заголовки для всех работавших страниц, и вы сможете увидеть, где все идет не так. Но я не могу найти способ сделать это.

$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLINFO_HEADER_OUT,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
$result = curl_exec($ch);

Какие-нибудь мысли?

0

Решение

Может быть, вы могли бы использовать CURLOPT_HEADERFUNCTION, чтобы получить заголовки?

$received_headers=array();
curl_setopt($ch,CURLOPT_HEADERFUNCTION,function($ch,string $header) use(&$received_headers):int{
$received_headers[]=$header;
return strlen($header);
});
curl_exec($ch);
var_dump($received_headers);

Тем не менее, в этой ситуации я был бы счастлив со всеми отладочными данными, предоставленными CURLOPT_VERBOSE — это не просто дает вам заголовки, но если есть сбой соединения или что-то странное, он скажет вам, так что у вас есть некоторые Идея о том, что произошло, кроме того, какие заголовки вы получили. поэтому вместо этого я бы порекомендовал что-то вроде:

$debug_str='';
$debugfileh=tmpfile();
$debugfile=stream_get_meta_data($debugfileh)['uri'];
curl_setopt_array($ch,array(
CURLOPT_VERBOSE=>true,
CURLOPT_STDERR=>$debugfileh
));
curl_exec($ch);
$debug_str=file_get_contents($debugfile);
fclose($debugfileh);
unset($debugfile,$debugfileh);
var_dump($debug_str);

обратите внимание, что решение выше даст вам заголовки, но не response body recieved so far (если таковые имеются), чтобы сделать это, вам, вероятно, придется объединить оба (CURLOPT_HEADERFUNCTION или CURLOPT_VERBOSE) и CURLOPT_WRITEFUNCTION

edit: исправил некоторые ошибки во втором коде, исходный код, который я написал, просто дал curl_setopt некоторые тихие ошибки …

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector