簡體   English   中英

HttpWebResponse錯誤處理了多個Set-Cookie標頭的值,這意味着CookieContainer不會存儲所有預期的Cookie

[英]HttpWebResponse mishandles values of multiple Set-Cookie headers, meaning CookieContainer doesn't store all intended cookies

我的C#Windows Forms程序需要與在HTTP響應中包含多個Set-Cookie標頭的服務器通信。

.NET的HttpWebResponse似乎將多個Set-Cookie標頭的內容連接為一個值-最終值無效。 使用關聯的CookieContainer時,這導致發送的Cookie無法正確存儲。

HttpWebRequest發起請求,服務器回復...

HTTP/1.1 200 OK
....
Set-Cookie: cookie1=123; Domain=127.0.0.1; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT
Set-Cookie: cookie2=456; Domain=127.0.0.1; Path=/somepath; Expires=Wed, 13 Jan 2021 22:23:01 GMT
....

...,而HttpWebResponse的標頭值(從VS Debugger復制)為:

Set-Cookie: cookie1=123; Domain=127.0.0.1; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT,cookie2=456; Domain=127.0.0.1; Path=/somepath; Expires=Wed, 13 Jan 2021 22:23:01 GMT

HttpWebResponseCookies屬性中僅包含cookie1

.NET對原始HttpWebRequestCookieContainer的獲取所有cookie的反思( https://stackoverflow.com/a/15991071 )還顯示僅cookie1被解析為一個對象,而cookie2被忽略。

有沒有辦法使多個Set-Cookie標頭得到正確處理,而又不必(顯着)使用HttpWebResponse低級或更復雜的替代方法呢?

您沒有指定任何遇到問題的代碼示例。 但是,我對CookieContainer.SetCookies()方法有類似的問題。 當我嘗試設置一個不錯的CookieHeader時:

u=21seag24.ctcggq.f54cfsvgqp; v=1466603692; auth=1; dfp_group=15

CookieContainer僅吸收了第一個cookie,僅此而已。 但是我都需要它們。

為了解決這個問題,我添加了額外的方法:

    public void FillCookieContainer(string cookieString, string url)
    {
        foreach (var cookieElement in cookieString.Split(';'))
        {
            CookieContainer.SetCookies(new Uri(url), cookieElement.Trim());
        }
    }

參考Microsoft文檔 CookieContainer具有特定的方法,例如CookieCutterCookieParser類。 通常,它拒絕所有格式錯誤的cookie(不是RFC2109 / RFC2965)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM