1

使用 AngleSharp,我试图加载一个页面,然后进行表单提交,但它没有给我预期的结果(即与浏览器不同),我认为这可能是因为缺少一些标题。当您提交表单时,连接并添加一些标题的最佳位置是什么?我可以在发送请求之前得到它吗?

例如,我的代码如下所示:

var doc = currentContext.OpenAsync(baseUrl).Result;
var form = doc.QuerySelector("form") as IHtmlFormElement;
// do some stuff to manipulate the form
// ...
// Here I need to set a header before SubmitAsync...
doc = form.SubmitAsync().Result;
4

1 回答 1

2

我找不到如何将标头设置挂钩到BrowsingContext实例的请求中。

如果没有其他人发现如何AngleSharp仅使用,这应该是首选解决方案,一种解决方法是自己手动发出 http 请求,使用框架的HttpClient,因此您可以根据需要使用请求标头,并且然后提取响应的文本并将其传递给AngleSharp's HtmlParser,这是我通常做的事情。

例子:

    HttpClient hc = new HttpClient();
    hc.DefaultRequestHeaders.TryAddWithoutValidation("headerSetting", "headerValue");
    var response = await hc.GetAsync("yourUrl");

    var html = await response.Content.ReadAsStringAsync();

    //from here on you are under AngleSharp's jurisdiction...
    var parser = new HtmlParser();
    IHtmlDocument parsedDoc = parser.Parse(html);

如果您不确定headers在您的代码中可能遗漏了哪些内容http request,我通常会做一件事来分析发布请求并确保我没有遗漏任何headers内容,即在 的实例Fiddler运行时在浏览器中执行操作,所以我可以剖析它。

例如,假设您有一个像

在此处输入图像描述

使用提琴手,我可以看到发送到服务器的所有内容(包括 cookie)

在此处输入图像描述

而且headers,这就是你所追求的。在这里,您将能够了解header通过浏览器发送的执行操作的所有设置,因此您可以在您的代码中模仿它http request(您拥有request和的所有数据response)。

在此处输入图像描述

于 2016-07-03T08:27:10.277 回答