我最近开始在我的一个项目中使用 libcurl.net 作为HttpWebRequest
和HttpWebResponse
类的替代品。我选择使用 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
?