0

ここで何が問題なのか、私は完全に混乱しています。私の理解はCookieContainer完全に間違っているに違いありません。自分のマシンでホストされているWebサイトにログインしようとしています。フィドラーをプロキシとして設定しているので、トラフィックを読み取ることができます。

Windows PhoneでCookieを表示しようとするたびに、Cookieコンテナは常に空になります。私はそのコンテナを満たせるようにするために非常に多くの異なることを試みましたが、すべてが失敗しました。これは私が試した最後のことです:

        CookieContainer cc = new CookieContainer();
        HttpWebRequest request = WebRequest.CreateHttp("http://localhost:8888/account/logon");
        request.ContentType = "application/x-www-form-urlencoded";
        request.Method = "POST";
        request.CookieContainer = cc;
        request.BeginGetRequestStream(streamResult =>
        {
            HttpWebRequest xR = streamResult.AsyncState as HttpWebRequest;
            Stream stream = xR.EndGetRequestStream(streamResult);
            StreamWriter sw = new StreamWriter(stream);
            sw.Write("username=user1&password=1111");
            sw.Close();

            xR.BeginGetResponse(responseResult =>
            {
                HttpWebRequest yR = responseResult.AsyncState as HttpWebRequest;
                HttpWebResponse response = yR.EndGetResponse(responseResult) as HttpWebResponse;
                response.Close();

                Dispatcher.BeginInvoke(() => MessageBox.Show("cc count: " + cc.Count.ToString() + "\nresponse count: " + response.Cookies.Count));
            }, xR);

        }, request);

ただし、コンソールアプリでまったく同じコードを使用すると、コンテナ「cc」にCookieが含まれます。

        CookieContainer cc = new CookieContainer();
        HttpWebRequest request = WebRequest.CreateHttp("http://localhost:8888/account/logon");
        request.ContentType = "application/x-www-form-urlencoded";
        request.Method = "POST";
        request.CookieContainer = cc;
        request.BeginGetRequestStream(streamResul =>
        {
            HttpWebRequest xR = streamResul.AsyncState as HttpWebRequest;
            Stream stream = xR.EndGetRequestStream(streamResul);
            StreamWriter sw = new StreamWriter(stream);
            sw.Write("username=user1&password=1111");
            sw.Close();

            xR.BeginGetResponse(responseResult =>
            {
                HttpWebRequest yR = responseResult.AsyncState as HttpWebRequest;
                HttpWebResponse response = yR.EndGetResponse(responseResult) as HttpWebResponse;
                response.Close();

                Console.WriteLine("cc count: {0}\nresponse count: {1}", cc.Count.ToString(), response.Cookies.Count);
            }, xR);

        }, request);

        Console.Read();

サーバーは、テストするたびに探している両方のCookieを送り返しています。ただし、何らかの理由で、WindowsPhoneコードはこれらのCookieを取得しません。これは、この質問とほとんど同じです。HttpWebRequestを使用してwp7でCookieを取得することはできませんが、解決策が何であるかがわかりません。

4

1 に答える 1

1

うわー、私はばかみたいに感じます。それはずっと働いていました...多分他の人にとってこれは明白です、しかし私はそれを逃しました。問題は、返送されるCookieがであるため、CookieHttpOnlyの数を要求しても、Cookieコンテナはそれらをまったく公開しないことです。

コンソールバージョンでは2つあることがわかりますが、WindowsPhone用のSystem.Net.dllがCookieContainerもう少しロックダウンされていると思います。

于 2012-12-19T00:13:56.597 に答える