PHP CURLOPT_WRITEFUNCTION返回body中的头信息



当我包含curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curl_write_flush')时,我得到标题插入$body。但是没有CURLOPT_WRITEFUNCTION,一切都很好。我能做些什么来阻止标题插入到$body?

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
function curl_write_flush($curl_handle, $chunk) { 
echo $chunk;
ob_flush();
flush();
return strlen($chunk);
}
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curl_write_flush'); // WORKS WITHOUT
$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
$headers = substr($response, 0, $header_size);
$body = substr($response, $header_size);
die($body);
?>

https://curl.se/libcurl/c/CURLOPT_WRITEFUNCTION.html

如果CURLOPT_HEADER是启用的,这使得头数据被传递到写回调,你可以得到的头数据传递到它的CURL_MAX_HTTP_HEADER字节。这通常意味着100K。

要么去掉curl_setopt($ch, CURLOPT_HEADER, 1);,要么你必须自己从回调数据中解析出标头。

您也可以使用CURLOPT_HEADERFUNCTION作为这个答案:

https://stackoverflow.com/a/41135574/1064767

相关内容

最新更新