3

次のように HttpClinet クラスを使用して Web ページを取得できます。

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(@"http://59.185.101.2:10080/jsp/Login.jsp");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

このページには、ユーザー名とパスワードという 2 つのテキストが表示されます。また、多くの隠し変数もレンダリングします。

このレンダリングされた Html を目的のアドレスに投稿したいのですが、ユーザー名とパスワードの独自の値を使用します。(残りの隠し変数を保持します)

これを行うにはどうすればよいですか?


PS: これはコンソール アプリケーションの POC です。

4

1 に答える 1

4

PostAsync次の方法を使用できます。

using (var client = new HttpClient())
{
    var content = new FormUrlEncodedContent(new[]
    { 
        new KeyValuePair<string, string>("username", "john"),
        new KeyValuePair<string, string>("password", "secret"),
    });
    content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

    var response = await client.PostAsync(
        "http://59.185.101.2:10080/jsp/Login.jsp", 
        content
    );
    response.EnsureSuccessStatusCode();
    var responseBody = await response.Content.ReadAsStringAsync();
}

FormUrlEncodedContentサーバー側スクリプトがコンテンツ インスタンスで必要とするすべての必要な入力パラメータを指定する必要があります。

隠し変数に関する限り、HTML Agility Pack などの HTML パーサーを使用して、最初の呼び出しから取得した HTML を解析し、それらを POST 要求のコレクションに含める必要があります。

于 2013-07-16T09:08:51.757 に答える