当我包含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