0

言語: C#
開発環境: Visual Studio 2008

Web サイトにログインして、そこからデータを取得したいと考えています。私の問題は、Cookie が機能しないことです。Web サイトで Cookie を有効にするように言われるたびに、Cookie コンテナを介して Cookie を有効にしました。

ログインの進行状況についてトラフィックを数回スニッフィングしましたが、問題はありません。ログインするためにさまざまな方法を試しましたが、他の誰かがこの問題を抱えているかどうかを検索しましたが、結果はありません...

ログインページは「www.uploaded.to」です。短い形式でログインするための私のコードは次のとおりです。

        private void login()
        {
        //Global CookieContainer for all the Cookies
        CookieContainer _cookieContainer = new CookieContainer();

        //First Login to the Website
        HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login");
        _request1.Method = "POST";
        _request1.CookieContainer = _cookieContainer;

        string _postData = "email=XXXXX&password=XXXXX";
        byte[] _byteArray = Encoding.UTF8.GetBytes(_postData);

        Stream _reqStream = _request1.GetRequestStream();

        _reqStream.Write(_byteArray, 0, _byteArray.Length);
        _reqStream.Close();

        HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse();
        _response1.Close();


        //########################

        //Follow the Link from Request1
        HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1");
        _request2.Method = "GET";
        _request2.CookieContainer = _cookieContainer;

        HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse();
        _response2.Close();


        //#######################

        //Get the Data from the Page after Login
        HttpWebRequest _request3 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/home");
        _request3.Method = "GET";
        _request3.CookieContainer = _cookieContainer;

        HttpWebResponse _response3 = (HttpWebResponse)_request3.GetResponse();
        _response3.Close();

        }

私は何週間もこの問題に悩まされており、うまくいく解決策が見つかりませんでした。助けてください...


もう一度試してみましたが、最初のリクエストは動作 (ログイン) しました。認証付きの Cookie を取得します。応答テキストは URL です: http://uploaded.to/login?coo=1この URL で GET リクエストを作成する必要がありますが、問題は、このリクエストで Cookie を送信せず、Wireshark で確認したことです。httpwebrequest の Cookie に問題がありますか?

私のコード:

CookieContainer _cookieContainer = new CookieContainer();

        //First Login to the Website
        HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login");
        _request1.Method = "POST";
        _request1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        _request1.AllowAutoRedirect = false;
        _request1.CookieContainer = _cookieContainer;
        _request1.ContentType = "application/x-www-form-urlencoded";
        _request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
        _request1.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie");

        string _postData = "email=XXXXX&password=XXXXXX";
        byte[] _byteArray = Encoding.UTF8.GetBytes(_postData);
        _request1.ContentLength = _byteArray.Length;

        Stream _reqStream = _request1.GetRequestStream();
        _reqStream.Write(_byteArray, 0, _byteArray.Length);
        _reqStream.Close();



        HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse();
        StreamReader _reader1 = new StreamReader(_response1.GetResponseStream());
        CookieCollection _cookieCollection = new CookieCollection();
        foreach (Cookie _cook in _response1.Cookies)
        {
            _cookieCollection.Add(_cook);
        }
        wbrowser_html.DocumentText = _reader1.ReadToEnd();

        _response1.Close();
        _reader1.Close();

        //########################

        HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1");
        _request2.Method = "GET";
        _request2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        _request2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";
        _request2.Referer = "http://uploaded.to/login";
        _request2.KeepAlive = true;

        //Here I set the language and the auth cookie, works fine
        _request2.CookieContainer = _cookieContainer;
        _request2.CookieContainer.Add(_cookieCollection);
        _request2.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie");

        HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse();
        StreamReader _reader2 = new StreamReader(_response2.GetResponseStream());
        wbrowser_html.DocumentText = _reader2.ReadToEnd();

        _response2.Close();
        _reader2.Close();

Wireshark で確認すると、2 番目のリクエストに Cookie が含まれていません。それらをリクエストに追加しましたが、とにかくサーバーに送信されませんでした??

この問題を解決するアイデアはありますか?

4

1 に答える 1

0

WebClient クラスを使用しないのはなぜですか?

NameValueCollection loginData = new NameValueCollection();
loginData.Add("email", "your_email");
loginData.Add("password", "your_password");

WebClient client = new WebClient();
string source = Encoding.UTF8.GetString(client.UploadValues("http://uploaded.to/login", loginData));
string cookie = client.ResponseHeaders["Set-Cookie"];
client.Headers["Cookie"] = cookie;

source = client.DownloadString("http://uploaded.to/some-page");
于 2010-03-19T09:27:06.463 に答える