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、これが推奨される解決策である必要があります。1 つの回避策は、フレームワークの を使用して手動でHttpClienthttp リクエストを自分で発行することです。これにより、必要に応じてリクエスト ヘッダーを操作できます。次に、応答のテキストを抽出して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、ポスト リクエストを分析して が欠けていないことを確認するために私が通常行うことの 1 つは、 のインスタンスの実行headers中にブラウザでアクションを実行することです。Fiddler、だから私はそれを分析することができます。

たとえば、次のようなフォームがあるとします

ここに画像の説明を入力

フィドラーを使用すると、サーバーに送信されたすべてのもの(Cookieを含む)を見ることができます

ここに画像の説明を入力

そしてheaders、それはあなたが求めているものです。headerここでは、ブラウザ経由でアクションを実行して送信されるすべての設定を知ることができるため、作成したコードでそれを模倣できます (両方のとhttp requestのすべてのデータがあります)。requestresponse

ここに画像の説明を入力

于 2016-07-03T08:27:10.277 に答える