0

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

我的 PHP 脚本在捕获 cookie 方面工作得非常好,所以我使用 libcurl.net 将大部分 cURL 功能移植到我的 C# 项目中。我遇到的问题是当我必须使用 cURL 选项发送多个请求标头CURLOPT_HTTPHEADER并且我必须使用 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

4

1 回答 1

1

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

于 2013-11-14T14:00:08.093 回答