2

C# プログラムを使用して Web サイトにアクセスしようとしています。Web サイトにアクセスするには 3 つの Cookie が必要なようですが、Cookie コンテナには 2 つしか入っていないため、Web サイトの他の部分にアクセスしようとするとアクセスできません。最初に GET を実行し、次に POST を実行します。このようにプログラムした理由は、最初の 2 つは最初に GET を使用し、次に POST を使用してログインして 3 つ目を取得したと Chrome 開発ツールから判断したためです。POST は 302 Moved Temporarily を示し、その後すぐにリダイレクトされます。最後のクッキーを取得できない理由は誰だと思いますか?

                 cookieJar = new CookieContainer();
        string formParams = string.Format("USERNAME={0}&PASSWORD={1}", username, password);

        Console.Write(" \n 1st count before anything : " + cookieJar.Count + "\n");  // 0 cookies
        //First go to the login page to obtain cookies
        HttpWebRequest loginRequest = (HttpWebRequest)HttpWebRequest.Create("https://server.com/login/login.jsp");

        loginRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        //.Connection = "keep-alive";
        loginRequest.Method = "GET";
        loginRequest.UseDefaultCredentials = true;
        loginRequest.CookieContainer = cookieJar;
        loginRequest.AllowAutoRedirect = false;



        HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse();
       Console.Write(" \n 2nd count after first response : " + cookieJar.Count + "\n"); // Only 2 are recorded.

    //Create another request to actually log into website
          HttpWebRequest doLogin = (HttpWebRequest)HttpWebRequest.Create("https://server.com/login/login.jsp");

        doLogin.Method = "POST";
        doLogin.ContentType = "application/x-www-form-urlencoded";
        doLogin.AllowAutoRedirect = false;
        byte[] bytes = Encoding.ASCII.GetBytes(formParams);
        doLogin.ContentLength = bytes.Length;
        using (Stream os = doLogin.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
    oLogin.CookieContainer = cookieJar;
        doLogin.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36";
        doLogin.Referer = "https://server.com/login/login.jsp";

        HttpWebResponse Response = (HttpWebResponse)doLogin.GetResponse();

Console.Write(" \n 2 回目の応答の後の 3 回目のカウント: " + cookieJar.Count + "\n"); // まだ 2 つ

4

1 に答える 1

0

HttpWebRequest の Cookie に問題がありました。

問題は、「server.com」に割り当てられた Cookie が「.server.com」に変更されることでした。ただし、「server.com」は「.server.com」と一致しませんでした。

より古いフレームワーク (3 だと思います) を使用している場合、おそらくこの問題が発生しています。

回避策は、リクエストで「www.server.com」などを使用することです。これは、「.server.com」に割り当てられた Cookie と一致します。

于 2013-06-18T19:41:52.657 に答える