[英]Retrieving multiple “Set-Cookie” headers from a HttpWebResponse
[英]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
HttpWebResponse
在Cookies
屬性中僅包含cookie1
。
.NET對原始HttpWebRequest
的CookieContainer
的獲取所有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具有特定的方法,例如CookieCutter和CookieParser類。 通常,它拒絕所有格式錯誤的cookie(不是RFC2109 / RFC2965)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.