2

HTTPWebRequestを使用して、WebサイトにログインするためのPOSTリクエストをシミュレートしています。しかし、Firebugを使用してログイン中にブラウザが何をしているかを追跡すると、そのログイン後にいくつかのGetRequestが作成されることがわかります。

だから私が探しているのは、POSTリクエストにそのGETリクエストを自動的に実行させる方法ですか?

誰かが私にJS関数を使うように言ったが、私はこれについて全く無知である。

private static async Task<byte[]> LoginAsync(string username, string password)
{
    var postData = new NameValueCollection();

    var uri = new Uri(string.Format("http://{0}/", ServerName));

    postData.Add("name", username);
    postData.Add("password", password);
    postData.Add("login", ParseLoginId(await GetPage("login.php")));

    return await HttpHandler.UploadValuesTaskAsync(uri, postData);
}

マイHTTPハンドラー

private CookieContainer _mContainer = new CookieContainer();

protected override WebRequest GetWebRequest(Uri address)
{
    var request = base.GetWebRequest(address);
    if (request is HttpWebRequest)
    {
        (request as HttpWebRequest).CookieContainer = _mContainer;
    }
    return request;
}

public void ClearCookies()
{
    _mContainer = new CookieContainer();
}

上記のコードを使用してPOSTリクエストを送信していますが、問題はブラウザの動作を完全にシミュレートしていないため、ログイン後に必要なGETリクエストを自動的に送信しないことです。

4

1 に答える 1

0

前述の GET 要求は、おそらく Location ヘッダーのリダイレクトです。

System.Net.WebClient クラスを使用しないのはなぜですか。 Web サイトへの C# コンソール/サーバー アクセス このリンクは、WebClient を拡張して Cookie 情報を永続化する方法を示しています。

于 2012-10-23T19:00:28.153 に答える