我正在使用如下代理连接到一个站点:
$curl = curl_init();
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
$result = curl_exec ($curl);
问题是CURLOPT_HEADER
从代理连接返回报头,而我需要从实际请求中返回报头。我相信解决方案涉及到使用CURLOPT_HEADERFUNCTION
,但我不知道如何使用它。
我尝试了这个(取自其他地方的SO):
curl_setopt($curl, CURLOPT_HEADERFUNCTION, "HandleHeaderLine");
使用函数:
function HandleHeaderLine($curl, $header_line ) {
echo "<br>YEAH: ".$header_line; // or do whatever
return strlen($header_line);
}
但似乎我只能返回字节数。我不确定如何获得实际的值。在我的情况下,我只需要Location
头。
谢谢。
发布于 2018-08-03 03:51:49
CURLOPT_HEADERFUNCTION
的匿名回调需要访问您希望在其中存储标头信息的变量。有几种不同的方法,但这里有一些示例:
使用use
$headers = [];
...
function HandleHeaderLine($curl, $header_line) use (&$headers)
{
...
if ($isHeaderIWant) {
$header[] = 'some info';
}
return strlen($header_line);
}
使用class属性:
private $headers = [];
...
function HandleHeaderLine($curl, $header_line)
{
...
if ($isHeaderIWant) {
$this->header[] = 'some info';
}
return strlen($header_line);
}
https://stackoverflow.com/questions/32653598
复制相似问题