首先我初始化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标头,当然我已经尝试将false
和null
放入CURLOPT_REFERER但它会导致referer字段为空,即Referer:
仍然发送到服务器但没有值(这对http规范来说是否正确?)。
是否有任何选项可以完全删除标题而不关闭并重新实例化curl句柄?
我想避免它,因为curl保持连接打开一段时间,如果我在从同一主机下载时不断关闭句柄,则可能需要更多时间。
答案 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,'');
标题仍会显示,但会显示为空白。