http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 12170|回复: 17

[其他] 请问怎么将reult.cookiecollection转成像result.cookie这样的字符串

[复制链接]
发表于 2013-1-30 10:32:40 | 显示全部楼层 |阅读模式
有时需要得到的不是set-cookie里的内容,而是HttpWebResponse.Cookies里的内容,但又需要格式是像reslut.cookie一样的字符串的格式。

求飞哥帮助。

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-1-30 10:39:56 | 显示全部楼层
CookieCollection 本身就是一个集合,直接合作循环就行了。
[code=csharp]  CookieCollection cc = new CookieCollection();
            StringBuilder cookie = new StringBuilder();
            foreach (Cookie item in cc)
            {
                cookie.Append(item.Name + "=" + item.Value + ";");
            }
[/code]
cookie 就是你要的字符类型的
 楼主| 发表于 2013-1-30 11:10:08 | 显示全部楼层
admin 发表于 2013-1-30 10:39
CookieCollection 本身就是一个集合,直接合作循环就行了。

cookie 就是你要的字符类型的
  1. HttpResult result = http.GetHtml(item);

  2.             StringBuilder my_cookie = new StringBuilder();

  3.             foreach (Cookie c in result.CookieCollection)
  4.             {
  5.                 my_cookie.Append(c.Name + "=" + c.Value + ";");
  6.             }

  7.             string cookie_xxx = my_cookie.ToString();

  8.             TextBox1.Text = result.Cookie;

  9.             TextBox2.Text = cookie_xxx;
复制代码
你看我这样写有错误吗。
TextBox2 无输出。
发表于 2013-1-30 11:20:09 | 显示全部楼层
无输出那说明是result.CookieCollection为空吧,你调试一下看看
 楼主| 发表于 2013-1-30 11:33:25 | 显示全部楼层
admin 发表于 2013-1-30 11:20
无输出那说明是result.CookieCollection为空吧,你调试一下看看
  1. if (response.Cookies != null)
  2.                     {
  3.                         result.CookieCollection = response.Cookies;
  4.                     }
复制代码
按照httphelper里的代码,result.CookieCollection应该有值的啊。
我看了cookie里有值,fiddler上半部分的header里的cookie。

我要抓的result.CookieCollection是这个页面的登录:
http://sso.jrj.com.cn/sso/ssologin
发表于 2013-1-30 12:08:26 | 显示全部楼层
xiaotianbao 发表于 2013-1-30 11:33
按照httphelper里的代码,result.CookieCollection应该有值的啊。
我看了cookie里有值,fiddler上半部分 ...

应该是没有值的,cookie字符串有值不代表集合就有值,
 楼主| 发表于 2013-1-30 12:58:26 | 显示全部楼层
admin 发表于 2013-1-30 12:08
应该是没有值的,cookie字符串有值不代表集合就有值,

我也看了下,result.cookiecollection好像一直是空。
什么样result.cookiecollection才会有值呢?
发表于 2013-1-30 13:17:43 | 显示全部楼层
xiaotianbao 发表于 2013-1-30 12:58
我也看了下,result.cookiecollection好像一直是空。
什么样result.cookiecollection才会有值呢?

这个真不清楚,你可以直接使用字符串Cookie的,为什么要使用这个呢
 楼主| 发表于 2013-1-30 15:19:53 | 显示全部楼层
admin 发表于 2013-1-30 13:17
这个真不清楚,你可以直接使用字符串Cookie的,为什么要使用这个呢

抓到的result.cookie不正确。需要的cookie在httpwebresponse.cookies里。
另外,有时网站会有两个post(两个200状态),但没有302这样的跳转。httphelper抓不到完整的cookie,set-cookies里能全部抓到,但还是少一条关键的。类似:auth=xxxx没有。
 楼主| 发表于 2013-1-30 16:10:11 | 显示全部楼层
admin 发表于 2013-1-30 13:17
这个真不清楚,你可以直接使用字符串Cookie的,为什么要使用这个呢
  1. MemoryStream _stream = new MemoryStream();
  2.                     if (response.Cookies != null)
  3.                     {
  4.                         result.CookieCollection = response.Cookies;
  5.                     }
  6.                     if (response.Headers["set-cookie"] != null)
  7.                     {
  8.                         result.Cookie = response.Headers["set-cookie"];
  9.                     }
复制代码
这里的result.CookieCollection = response.Cookies;没有赋值成功吗。任务网站好像这个result.CookieCollection都是空。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-3-28 19:53

© 2014-2021

快速回复 返回顶部 返回列表