苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 15205|回复: 4

[问题交流] httphelper抓取时遇到csrf_token过期的问题怎么解决

[复制链接]
发表于 2018-5-15 16:20:33 | 显示全部楼层 |阅读模式
本帖最后由 yi_shu 于 2018-5-15 16:22 编辑

[C#] 纯文本查看 复制代码
 HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "https://m.zdao.com/",
                Method = "get",
                Host = "m.zdao.com",             
                UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
                
            };
            HttpResult result = http.GetHtml(item);
            string cookies = result.Cookie;
            string id = textBox1.Text;           
            string csrf_token = cookies.Split(';')[4].Split('=')[1];
           
            string postData = $"id={id}&cpid=57c3ed6ba45daef88f10a1d5ef684d40&account_type=cc&csrf_token={csrf_token}";
            HttpItem httpItemGet = new HttpItem()
            {
                URL = "https://m.zdao.com/addrlist/get_evaluate",
                Method = "post",
                Host = "m.zdao.com",
                Accept = "application/json, text/javascript, */*; q=0.01",
                UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
                ContentType = "application/x-www-form-urlencoded; charset=UTF-8",
                Referer = item.URL,
                Postdata = postData,
                Cookie = cookies,
            };
            httpItemGet.Header.Add("Origin", "https://m.zdao.com");
            httpItemGet.Header.Add("X-Requested-With", "XMLHttpRequest");
            httpItemGet.Header.Add("Accept-Encoding", "gzip, deflate, br");
            httpItemGet.Header.Add("Accept-Language", "zh-CN,zh;q=0.9");
          //  httpItemGet.Header.Add("X-CSRF-Token", csrf_token);
            HttpResult httpResultget = http.GetHtml(httpItemGet);



先上代码,要请求的是https://m.zdao.com/addrlist/get_evaluate这个接口,直接请求返回404错误,后来发觉提交的cookies里要带有csrf_token,所以先请求一次主页面,获取到csrf_token,但是这次请求返回的是csrf_token过期,请各位大神支支招,抓取像这种页面时如何保证csrf_token不过期!我这里因为是测试的,取cookies里的csrf_token,直接取指定值了string csrf_token = cookies.Split(';')[4].Split('=')[1];,不要纠结我csrf_token取得不对,这个在我机器上是对的!


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-5-16 10:48:11 | 显示全部楼层
过期说明是cookie问题
 楼主| 发表于 2018-5-16 11:40:09 | 显示全部楼层
cookies是正常的!我感觉是sessionid的问题,他这个csrf_token,每开一次窗口就换一次,感觉第一次提交以后,第二次提交的和第一次不是同一个会话了,所以csrf_token会过期,他本身是在同一个页面上用ajax刷新的!所以不会过期,但是我用代码是二次提交,不是同一个会话了!
发表于 2018-5-16 11:58:24 | 显示全部楼层
不是同一个会话就说明Cookie不是同一个啊,Session也是在Cookie存储的,客户端要做的就是保持两次请求的Cookie相同服务端才会当成一个会话。
把包抓下来对比一个Cookie看看
发表于 2021-4-9 14:19:09 | 显示全部楼层
遇到了相同的问题 楼主解决了么
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-12-27 03:43

© 2014-2021

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