模拟登录时HttpWebResponse只能获取一个Set-Cookie,无法获取多个,请问怎么办呢

gaoranaa 2017-02-13 03:49:22


我在模拟登录一个论坛时,post数据上去之后发现论坛的cookie进行的重写,程序只能获取到第一条设置的cookie CAKEPHP
但在后续采集数据时需要的是第三条CAKEPHP,请问这该怎么解决呢?
我用HttpWebResponse.Headers["Set-Cookie"]和HttpWebResponse.Cookies都只能得到那第一条Cookies,后面几条都获取不到,查来查去难道是C#的HttpWebResponse根本就无法获取多条Cookies吗?望大神指点
...全文
968 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MangoMiku 2018-10-30
  • 打赏
  • 举报
回复
我来挖贴了。。。
其实可以这样,只不是字符串,但也可以自己去用字符串创建Cookies


HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string[] setCookies = response.Headers.GetValues("Set-Cookie");


这样就可以用字符串数组来装下多个同名Set-Cookie的字符串了,要取那个,用下标取就可以了
sdfhsr4agsfg 2017-08-03
  • 打赏
  • 举报
回复
试试 var resultAsync = request.GetResponseAsync(); var cs3 = resultAsync.Result.Headers.GetValues("Set-Cookie").ToList();
sdfhsr4agsfg 2017-08-03
  • 打赏
  • 举报
回复
刚才找到方法了, 先给reqeust设置一个CookieContainer,用于保存cookie, 然后通过response.Cookies就可以取到了。
crown_whp 2017-06-24
  • 打赏
  • 举报
回复
怎么解决的啊。。。。求解
Poopaye 2017-02-15
  • 打赏
  • 举报
回复
引用 6 楼 crystal_lz 的回复:
直接 使用CookieContainer 是可以了 什么都不用管 CookieContainer m_cookies = new ... 之后的 Request.CookieContainer = m_cookies; 就可以了 什么都不用管 有cookie会自己填充到 m_cookies 里面去 每次request的时候 带上他就是了
这楼已经是正解了 不知道为啥还要折腾header
QQ234788028 2017-02-15
  • 打赏
  • 举报
回复
引用 8 楼 gaoranaa 的回复:
[quote=引用 7 楼 QQ234788028 的回复:] 可以的,专业从事模拟行业,推荐用httphelper帮助类
httpHelper我用免费版本的,试了,一样的结果,只能获取到第一条set-cookie,其它获取不到,付费版本我没事,httphelper本身也是基于webrequest的吧?[/quote]貌似HttpOnly只读的获取不到,只能用WebBrowser模拟来获取 你看看这个吧 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=c%23%E8%8E%B7%E5%8F%96HttpOnly&oq=c%2523%25E8%258E%25B7%25E5%258F%2596%25E4%25B8%258D%25E5%2588%25B0HttpOnly&rsv_pq=d424e04800020f38&rsv_t=8bd7DQyW5GcfXUzAWmtER1cahllLt5XOn5nTXPyj95MGv5MXAUOumETptG8&rqlang=cn&rsv_enter=1&inputT=3659&rsv_sug3=8&rsv_sug1=5&rsv_sug7=000&rsv_n=2&rsv_sug2=0&rsv_sug4=4618&rsv_sug=1
QQ234788028 2017-02-15
  • 打赏
  • 举报
回复
可以的,专业从事模拟行业,推荐用httphelper帮助类
gaoranaa 2017-02-15
  • 打赏
  • 举报
回复
引用 7 楼 QQ234788028 的回复:
可以的,专业从事模拟行业,推荐用httphelper帮助类
httpHelper我用免费版本的,试了,一样的结果,只能获取到第一条set-cookie,其它获取不到,付费版本我没事,httphelper本身也是基于webrequest的吧?
gaoranaa 2017-02-14
  • 打赏
  • 举报
回复
试过了,还是没办法,CAKEPHP似乎是个组件,在post时服务器好像将CAKEPHP的cookie反复删除创建了两次,弄了个新的cookie,而在heared头中只显示第一条CAKEPHP cookie,但在其他后续的页面中使用的有效cookie是第三条CAKEPHP,登录时始终无法获取到有效的第三条CAKEPHP,实在不知道该怎么办了
crystal_lz 2017-02-14
  • 打赏
  • 举报
回复
直接 使用CookieContainer 是可以了 什么都不用管 CookieContainer m_cookies = new ... 之后的 Request.CookieContainer = m_cookies; 就可以了 什么都不用管 有cookie会自己填充到 m_cookies 里面去 每次request的时候 带上他就是了
cpycpy000 2017-02-13
  • 打赏
  • 举报
回复
引用 3 楼 gaoranaa 的回复:
[quote=引用 2 楼 cpycpy000 的回复:] 你应该对HttpWebResponse.Headers这个集合进行遍历,顺便打个断点看看这个集合里有哪几个头信息,你就知道了
已经遍历过了,除了Set-Cookie这个头信息之外,其它所有头信息早都分析过了,现在主要问题是根本就获取不到4个Set-Cookie头信息,只能获取到第一个 Set-Cookie头信息,而我用http分析器跟踪登录时就发现实际有4个Set-Cookie头信息,就如图片中那样,我想知道怎么样才能将Set-Cookie头信息获取完整,不要再让我重复什么遍历之类的事情,该遍历的都遍历过了,该分析的也分析过了,怎么样能获取到完整的全部的全部的全部的全部的全部的全部的Set-Cookie,而不是只有一个Set-Cookie,我这么描述你能明白吗? httpHelper框架我也试过,获取到的Set-Cookie也只有一个,我查其他资料,发现也有人遇到过这种情况,服务器设置多个Set-Cookie,而通过HttpWebResponse只能获取到第一个Set-Cookie,但没人给出解决办法,怀疑这是不是个BUG啊[/quote] 那你试试用WebClient去获取看看?我以前模拟登录的网站有两个Set-Cookie,我也都拿到了啊.......
gaoranaa 2017-02-13
  • 打赏
  • 举报
回复
引用 2 楼 cpycpy000 的回复:
你应该对HttpWebResponse.Headers这个集合进行遍历,顺便打个断点看看这个集合里有哪几个头信息,你就知道了
已经遍历过了,除了Set-Cookie这个头信息之外,其它所有头信息早都分析过了,现在主要问题是根本就获取不到4个Set-Cookie头信息,只能获取到第一个 Set-Cookie头信息,而我用http分析器跟踪登录时就发现实际有4个Set-Cookie头信息,就如图片中那样,我想知道怎么样才能将Set-Cookie头信息获取完整,不要再让我重复什么遍历之类的事情,该遍历的都遍历过了,该分析的也分析过了,怎么样能获取到完整的全部的全部的全部的全部的全部的全部的Set-Cookie,而不是只有一个Set-Cookie,我这么描述你能明白吗? httpHelper框架我也试过,获取到的Set-Cookie也只有一个,我查其他资料,发现也有人遇到过这种情况,服务器设置多个Set-Cookie,而通过HttpWebResponse只能获取到第一个Set-Cookie,但没人给出解决办法,怀疑这是不是个BUG啊
cpycpy000 2017-02-13
  • 打赏
  • 举报
回复
你应该对HttpWebResponse.Headers这个集合进行遍历,顺便打个断点看看这个集合里有哪几个头信息,你就知道了
gaoranaa 2017-02-13
  • 打赏
  • 举报
回复
有谁知道吗?

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧