我最近开始使用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
?
答案 0 :(得分:0)
事实证明我正在正确添加多个标头。我只是创建了一个Slist
对象,并使用CURLOPT_HTTPHEADER
选项将我的标题添加到请求中。通过这种方式,可以“伪造”AJAX请求或Web浏览器发送的任何其他类型的请求。问题是我没有按照我的要求发送正确的POST数据。