使用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;
答案 0 :(得分:2)
我找不到如何将标头设置挂钩到BrowsingContext
实例的请求中。
如果没有其他人使用AngleSharp
找到如何做到这一点,这应该是首选解决方案,一种解决方法是自己发出http请求,手动,使用框架的HttpClient
,因此您可以根据需要使用请求标头,然后提取响应的文本并将其传递给AngleSharp
{{1}我经常做的事情。
示例:
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
1}},是在Fiddler
的实例运行时在浏览器中执行操作,因此我可以剖析它。
例如,假设您有一个类似
的表单使用fiddler我可以看到发送到服务器的所有内容(包括cookie)
和headers
,这就是你所追求的。在这里,您将能够了解通过浏览器执行操作所发送的所有header
设置,因此您可以在代码制作http request
中模仿它(您拥有{{1}的所有数据}和request
)。