首页 新闻 会员 周边

请问如何将一串string字符串转换成CookieCollection

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-11 17:22

我使用HttpWebRequest模拟登录WordPress,可是总是返回的response.Cookies属性中总是要少个cookies这样让我无法成功登录,但是response.Headers["Set-Cookie"],却能得到全部cookies。查了百度好久没有办法解决。

因为我需要返回CookieCollection程序后面要用着,不能直接使用response.Headers["Set-Cookie"]返回的string字符串,所以我就想问问怎么能将set-cookie取到的字符串转成CookieCollection。最好是通用的,这样我就可以改一下POST方法全部取set-cookie的值再转成CookieCollection。

或者哪位高手能指点一下怎么能取全完整的cookies,谢谢各位了小弟真的很急

风灵波的主页 风灵波 | 初学一级 | 园豆:4
提问于:2012-07-11 14:46
< >
分享
最佳答案
0
收获园豆:20
dudu | 高人七级 |园豆:30994 | 2012-07-11 15:01

这代码没有用与我的差别不大,但是如果成功应该是取回3个cookies,但是仍然只能取回两个

风灵波 | 园豆:4 (初学一级) | 2012-07-11 15:18

@风灵波: 你用HttpWebRequest时,UserAgent设置的是普通浏览器的吗?

dudu | 园豆:30994 (高人七级) | 2012-07-11 15:19

@dudu:  是的,是我抓包的浏览器信息,只有这样才能得到response.Headers["Set-Cookie"]全整的信息。

如果高手不太忙可以下载WordPress试试

风灵波 | 园豆:4 (初学一级) | 2012-07-11 15:49

@风灵波: 找到一个参考:Login Wordpress using HttpWebRequest

dudu | 园豆:30994 (高人七级) | 2012-07-11 15:52

@dudu:  前辈,我发现了一个不知道算不算问题的问题,Set-Cookie取回cookies中,有两个是相同的。而这两个相同的只恰好就是response.Cookies没有取到的值。这是不是有关系?response.Cookies只能取回两个,set-cookie能取回四个

风灵波 | 园豆:4 (初学一级) | 2012-07-11 16:02

@风灵波: 这里提到的问题与你遇到的问题一样 —— CookieContainer doesn't save all cookies

试试:

request.AllowAutoRedirect = false; 
dudu | 园豆:30994 (高人七级) | 2012-07-11 16:16

@dudu: 是的好像啊,WP登录是有一个302重定向,我也的确设置的是request.AllowAutoRedirect = true ;但就算改成false仍然取不完全。。。这到底是什么一个问题真是郁闷。。。不过还是要谢谢前辈的耐心指点

风灵波 | 园豆:4 (初学一级) | 2012-07-11 16:21

@风灵波: 那篇帖子中不是已经写出解决问题的代码了吗?

dudu | 园豆:30994 (高人七级) | 2012-07-11 16:23

@dudu: 您是说最后一篇吗?他是手动重定向,可是cookies仍然不是全的啊。。。在手动处理时设置request.AllowAutoRedirect = false,这个我是知道的。。。但是之前的cookies仍然不全。。。这让我没有办法

风灵波 | 园豆:4 (初学一级) | 2012-07-11 16:35

@风灵波: 就是Actual fix部分的代码:

if (response.GetType() == typeof(HttpWebResponse))
            {
                if(response.Headers["Location"] != null)
                {

                    cookieContainer.Add(response.ResponseUri, GetAllCookiesFromHeader(response.Headers["Set-Cookie"], response.ResponseUri.Host));

                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(response.Headers["Location"]);
                    req.Method = "GET";
                    req.AllowAutoRedirect = false;
                    req.CookieContainer = cookieContainer;
                    req.UserAgent = userAgent;
                    req.Timeout = timeout;
                    req.Accept = accept;
                    return GetWebResponse(req);
                }
dudu | 园豆:30994 (高人七级) | 2012-07-11 16:44

@dudu:  这个是提问的人自己修正的代码,不过最重要的GetAllCookiesFromHeader与GetWebResponse方法没有代码。。。。所以这段其他没有什么用,,,,GetWebResponse基本上知道是写的什么没什么问题,,,GetAllCookiesFromHeader看他提供的参数其他用的也就是我这个问题提的方法,如何将set-cookes转成CookieCollection

风灵波 | 园豆:4 (初学一级) | 2012-07-11 17:00

@风灵波: 参考代码:http://stackoverflow.com/a/1462309

dudu | 园豆:30994 (高人七级) | 2012-07-11 17:17

@dudu:  是的,,这篇文章我也找到了正好有这个方法,,,前辈您真的是好热心啊,希望以后能多多向您学习

风灵波 | 园豆:4 (初学一级) | 2012-07-11 17:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册