【问题标题】:Passing multiple request headers to libcurl.net将多个请求标头传递给 libcurl.net
【发布时间】:2013-11-23 09:23:35
【问题描述】:

我最近开始在我的一个项目中使用 libcurl.net 来替代 HttpWebRequest 和 HttpWebResponse 类。我选择使用 libcurl.net 而不是托管类的原因是 libcurl.net 模仿了 PHP 中 cURL 的行为,并且我从 PHP 中移植了一些代码。我尝试使用内置托管类,但 CookieContainer 类没有从我试图从中捕获 cookie 的网站正确捕获所有 cookie。如果我能弄清楚如何正确捕获 cookie,我可能最终会回到托管类。

我的 PHP 脚本在捕获 cookie 方面工作得非常好,因此我使用 libcurl.net 将大部分 cURL 功能移植到了我的 C# 项目中。我遇到的问题是,当我必须使用CURLOPT_HTTPHEADER cURL 选项发送多个请求标头时,我必须使用 Slist 数据类型来传递多个标头,如下所示:

Slist headers = new Slist();
headers.Append("Content-Type: application/x-www-form-urlencoded");
headers.Append("X-Requested-With: XMLHttpRequest");
easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, headers);

我有时不得不伪造一个 AJAX 请求,但它似乎没有将 X-Requested-With: XMLHttpRequest 标头与请求一起传递,因为我正在抓取的网站不会为这些“假”AJAX 请求返回任何结果。如果我设置了CURLOPT_HTTPHEADER,我需要设置Content-Type 标头还是始终默认为Content-Type: application/x-www-form-urlencoded?

【问题讨论】:

    标签: c# ajax cookies curl libcurl.net


    【解决方案1】:

    事实证明,我正确地添加了多个标题。我只是创建了一个Slist 对象并使用CURLOPT_HTTPHEADER 选项将我的标头添加到请求中。通过这种方式,可以“伪造”AJAX 请求或 Web 浏览器发送的任何其他类型的请求。问题是我的请求没有发送正确的 POST 数据。

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2015-06-09
      • 1970-01-01
      • 2012-11-17
      • 2013-03-08
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多