将多个请求标头传递给libcurl.net

时间:2013-11-11 14:23:43

标签: c# ajax cookies curl libcurl.net

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

1 个答案:

答案 0 :(得分:0)

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