【发布时间】:2015-12-15 16:42:38
【问题描述】:
我正在使用这样的代理连接到一个站点:
$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 正在从代理连接返回标头,而我需要从实际请求到 URL 的标头。我相信解决方案涉及使用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 标题。
谢谢。
【问题讨论】:
-
curl 是返回 only 代理标头还是 所有 标头?因为如果它是第一个,它可能与您的代理配置有关,可能会抑制此类信息(我不认为如何,因为浏览器需要它们),如果是第二个,您只需处理它返回的字符串标题(@ 987654321@).
-
Curl 肯定是在检索所有标题。当我启用
verbose时,我可以看到它。问题是CURLOPT_HEADER只返回代理头,所以我不能用它来检索Location头