0

ときどき、プログラムが HTTP Post の作成に失敗したように見えました。これを、明らかに失われているクッキーに絞り込みました。

色々調べて、絞りました

HttpWebResponse response = (HttpWebResponse)http.GetResponse();

奇妙なことは、通常、このメソッドが最初に実行されたときに発生するわけではありません (この Cookie の再追加を強制した後)。

このケースで機能するソリューションを一緒にハッキングしたようです(ただし、通常のハックソリューションのように、他のケースを壊すのではないかと心配しています)。

var cookiesPrePull = cookies.GetCookies(http.RequestUri);
HttpWebResponse response = (HttpWebResponse)http.GetResponse();
foreach (Cookie cookiePre in cookiesPrePull)
{
    bool bExist = false;
    foreach (Cookie cookiePost in cookies.GetCookies(http.RequestUri))
    {
        if (cookiePre.Name == cookiePost.Name)
        {
            bExist = true;
            break;
        }
    }
    if (!bExist)
    {
        cookies.Add(cookiePre);
    }
}

私が理解しようとしているのは、GetResponse 呼び出しによって Cookie がドロップされる理由です。Fiddler で調べると、この Cookie については何も言及されていません。唯一の Cookie コードは、2 つの Cookie を設定することです。1 つは既に存在し、1 つは存在しません。

Cookie の有効期限が切れていないことは間違いありません。これについて完全に途方に暮れています

乾杯

4

1 に答える 1

1

CookieCollection と CookieContainer を次のように使用して、Cookie を維持してみてください。

CookieContainer container = new CookieContainer();
CookieCollection cookies = new CookieCollection();

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somesite.com/login");
request.CookieContainer = container;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cookies = response.Cookies; // capture the cookies from the response

request = (HttpWebRequest)WebRequest.Create("http://somesite.com/profile");
request.CookieContainer = container;
request.CookieContainer.Add(cookies); // add cookies from the previous response to the new request

response = (HttpWebResponse)request.GetResponse();
cookies = response.Cookies; // capture the cookies from the response
于 2013-09-26T15:15:22.273 に答える