如何从curl句柄中删除以前设置的请求标头referer字段?

时间:2011-11-14 19:03:35

标签: php curl http-headers libcurl

首先我初始化curl句柄:

$ch = curl_init();

接下来,我设置了url和referer标题:

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,$referer);

最后执行声明:

curl_exec($ch);

现在我可以使用另一个url而不关闭并重新打开句柄,所以:

curl_setopt($ch,CURLOPT_URL,$another_url);

这里头痛开始,因为我不知道如何禁用将发送服务器的referer标头,当然我已经尝试将falsenull放入CURLOPT_REFERER但它会导致referer字段为空,即Referer:仍然发送到服务器但没有值(这对http规范来说是否正确?)。

是否有任何选项可以完全删除标题而不关闭并重新实例化curl句柄?

我想避免它,因为curl保持连接打开一段时间,如果我在从同一主机下载时不断关闭句柄,则可能需要更多时间。

2 个答案:

答案 0 :(得分:6)

您可以完全删除referer字段或通常由curl处理的任何其他字段,方法是将“:”后的任何内容传递给CURLOPT_HTTPHEADER

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Referer:"));

它不会出现在标题中。

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPHEADER

答案 1 :(得分:1)

Referer标头应该是完整的URI或相对于请求的URI:

http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z14

似乎空白的Referer标题符合规范,所以你可以:

curl_setopt($ch,CURLOPT_REFERER,'');

标题仍会显示,但会显示为空白。