1

我的 C# Windows 窗体程序需要与Set-Cookie在 HTTP 响应中包含多个标头的服务器通信。

.NETHttpWebResponse似乎将多个Set-Cookie标头的内容连接成一个值 - 使最终值无效。这会导致在使用关联的CookieContainer.

例子

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
....

...andHttpWebResponse的标头值(从 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仅包含cookie1inCookies属性。

.NET Reflection on the original HttpWebRequest's CookieContainerto get all cookies ( https://stackoverflow.com/a/15991071 ) 也显示仅cookie1被解析为对象并被cookie2忽略。

Set-Cookie有没有办法在不诉诸(显着)较低级别或更复杂的替代方案的情况下正确处理多个标题HttpWebResponse

4

1 回答 1

0

您没有指定任何您遇到问题的代码示例。但是我对CookieContainer.SetCookies()方法有类似的问题。当我尝试设置一个不错的 CookieHeader 时:

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

CookieContainer 只吸收了第一块饼干,仅此而已。但我需要他们所有。!

为了解决这个问题,我添加了额外的方法:

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

参考微软文档CookieContainer 有一个特定的方法,比如CookieCutterCookieParser类。一般来说,它会拒绝所有格式错误的 cookie(不是 RFC2109/RFC2965)。

于 2016-07-08T12:34:44.607 回答