質問

(正しい)ユーザー名とパスワードを提供することにより、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;
    }
}
役に立ちましたか?

解決

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

org.apache.struts.taglib.html.token = 81243ce1a02ff285745f7c25b86234a9&showlogin = true&upgrade =&username = username&password = password&password&submit = log+log+in

これらの値も追加してみて、トークンの生成方法を把握してください。

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

別の編集:リクエストまたは投稿データの使用を行っているときにサーバーとブラウザの間で何が起こっているのか(= firefox)を参照してください LiveHttPheaders アドオン。

他のヒント

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

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

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

最初の問題が1つ表示されます。送信URLではなくページURLに投稿しています(セッションIDがあり、私のコードでは有効なセッションIDをチェックします)。また、ユーザー名のCookieを作成している「ProcessSaveuserch()」の送信前に呼ばれるJavaScript関数もあります。これのいずれかの省略は、あなたのログインの成功を妨げている可能性があります。それは実験であり、私が恐れている運動を発見します。

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

また、他のと言われているように、あなたは実験する必要があります。私がしているのは、FireBugをダウンロードしてインストールし、ブラウザによってどのように送信されているか、ヘッダーなどが表示されることです。その後、httpwebrequest/webclientを使用して同じリクエストを複製します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top