4

(正しい)ユーザー名とパスワードを入力して、Webサイトにログオンしようとしています。

コードは次のとおりです。

        string URL = @"https://www.t-mobile.co.uk/service/your-account/login/";

        string username = "a_user";
        string password = "a_password";
        //ServicePointManager.Expect100Continue = false;

        CookieAwareClient client = new CookieAwareClient();


        NameValueCollection postData = new NameValueCollection();
        postData.Add("username", username);
        postData.Add("password", password);

        byte[] response = client.UploadValues(URL,  postData);

        ASCIIEncoding enc = new ASCIIEncoding();
        string Source = enc.GetString(response);

しかし、驚いたことに、ログオンしていません。ログオンページが返されます。

どんな助けでもありがたいです、そしてこれは今私の頭をやっています!!

ありがとう、ジム

完全を期すために、ここに私のWebClientクラスがあります-

public class CookieAwareClient : WebClient
{
    private CookieContainer m_container = new CookieContainer();
    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = m_container;
        }
        return request;
    }
}
4

4 に答える 4

2

ブラウザにログインしようとすると、これはサーバーに投稿されます。

org.apache.struts.taglib.html.TOKEN = 81243ce1a02ff285745f7c25b86234a9&showLogin = true&upgrade =&username = username&password = password&submit = Log + in

これらの値も追加してみて、TOKENがどのように生成されるかを理解してください。

編集:そのページがあなたに与えるクッキーもまた提出されているかどうかを確認してください。

別の編集: LiveHttpHeadersアドオンを使用してリクエストを行ったり、データを投稿したりするときに、サーバーとブラウザー(= Firefox)の間で何が起こっているかを確認しすぎます。

于 2009-09-22T11:55:18.503 に答える
1

次のようなユーザーエージェントを追加してみてください。

client.Headers.Add("user-agent", "your user agent here");

Webサイトは、特定のブラウザが使用されていること、および/または人間のふりをしていることを確認したい場合があります。

于 2009-09-22T11:48:22.850 に答える
0

最初の問題が1つあります。送信URLではなく、ページURLに投稿しています(セッションIDがあり、私のコードでは有効なセッションIDを確認しています)。ユーザー名のCookieを作成する送信'processSaveUserCh()'の前に呼び出されるjavascript関数もあります。これらのいずれかを省略すると、ログインの成功が妨げられる可能性があります。これは実験であり、私が恐れている演習を発見するためのものです。

于 2009-09-22T11:53:58.333 に答える
0

また、CookieAwareClientnクラスを作成するたびに、新しいCookieContainerを作成していることに気付きました。これは、リクエスト間でCookieが保存されていないことを意味します。そのメンバーを静的にして、常に同じcookiecontainerを使用するようにします。

また、他の人が言ったように、あなたは実験しなければならないでしょう。私が行うのは、Firebugをダウンロードしてインストールし、リクエスト/レスポンスがブラウザによってどのように送信されているか、ヘッダーなどを確認することです。次に、HttpWebRequest/WebClientを使用して同じリクエストを複製します。

于 2009-10-02T15:21:02.433 に答える