【问题标题】:how to remove previously set request header referer field from curl handle?如何从 curl 句柄中删除先前设置的请求标头引用字段?
【发布时间】:2011-12-28 22:16:38
【问题描述】:

首先我初始化 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 会在一段时间内保持连接打开,如果我在从同一主机下载时不断关闭句柄,则可能需要更多时间。

【问题讨论】:

  • 您必须完全删除标题吗?难道你不只是将它设置为与您请求的 url 相同,或者与上一个请求中的 url 相同吗?
  • 是的,我愿意。可能有非常严格的服务器应该在引用中。直到现在我还没有遇到任何,但我提前询问。问题真的是,如果这种行为在 http 规范方面是正确的?
  • 如果有bug,可以给我链接吗?

标签: php curl http-headers libcurl


【解决方案1】:

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

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

而且它根本不会出现在标题中。

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

【讨论】:

    【解决方案2】:

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

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

    似乎一个空白的 Referer 标头符合规范,所以您可以:

    curl_setopt($ch,CURLOPT_REFERER,'');
    

    标题仍然会出现,但会是空白的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2013-02-05
      相关资源
      最近更新 更多