【问题标题】:Overwrite CURL internal headers覆盖 CURL 内部标头
【发布时间】:2012-09-06 05:40:33
【问题描述】:

目前,我正在使用 C++ 中的 libcurl 开发 HTTP 代理。

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

以上是我自定义 HTTP 请求标头的代码。 headers 参数是 curl_slist 指针变量。我已经使用 curl_slist_append() 方法附加了所有必要的头部信息,如 Accept、Keep Alive、Referer 等。然而,当我使用wireshark观察网络流量时,我发现CURL并没有使用我自定义的headers,而是使用了“Accept: * / *\r\n”。

有谁知道如何禁用 CURL 的内部标头?

【问题讨论】:

    标签: c++ libcurl


    【解决方案1】:

    试试 CURLOPT_ENCODING,不知道 C++ 但在 PHP:

    “Accept-Encoding:”标头的内容。这使解码 的回应。支持的编码是“identity”、“deflate”和 “压缩包”。如果设置了一个空字符串“”,则一个包含所有 发送支持的编码类型。

    【讨论】:

    • 感谢您的回复。我知道 CURLOPT_ENCODING,但它仅适用于“Accept-Encoding:”标头。我也使用了 CURLOPT_COOKIE、CURLOPT_USERAGENT 和 CURLOPT_REFERER。但是,所有这些选项都没有涵盖所有类型的 HTTP 标头。因此,我只需要一种通用的方法来处理各种 HTTP 标头。就个人而言,我认为将所有标题转储到 curl_slist 然后传递给 curl_easy_setopt() 函数更有效。
    • 其实我在 CURL 文档中找到了一些资料。但我真的不确定。如果您添加一个由 libcurl 内部生成和使用的标头,则将使用您添加的标头。如果您添加一个没有内容的标题,如“接受:”(冒号右侧没有数据),内部使用的标题将被禁用。因此,使用此选项,您可以添加新标题、替换内部标题和删除内部标题。要添加没有内容的标题,请将内容设为两个引号:“”。
    • 我测试了下面的代码,但结果还是一样。 string test = "Accept:";curl_slist_append(headers, (char*)test.c_str());
    • link,我认为这是最好的解决方案。
    • Accept: application/json -- 如果服务器提供 json 但不接受此标头,则服务器可能配置错误。
    【解决方案2】:

    CURLOPT_HTTPHEADER 是添加、删除或替换内部使用的标头的方法。如果您对此有疑问,请向我们展示一个重复该问题的完整程序,我们或许可以提供帮助。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2017-04-27
      • 2021-08-25
      • 2016-08-06
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多