本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com 。
内容可能有不到之处,欢迎交流。
未经本人允许禁止转载。

文章目录

  • 问题情景1和解决方案
  • 问题情景2和解决方案
  • 实战项目

问题情景1和解决方案

**在很多POST请求中,经常会加入一些字段来控制会话或者数据的表单提交。**例如,在京东的模拟登陆中,并不是你在Java或者python程序中,直接输入用户名密码就能登陆成功的。如下图所示:


如果我们想要用程序登陆京东的话,必须想办法将一些字段给解析出来,然后再使用程序表单提交的方式,搞定这一些。因此,问题的关键是怎么将这些字段给解析出来或者拼接出来呢?

实际上,这些字段就存在与登陆的首页之中,即

https://passport.jd.com/new/login.aspx

通过,审查元素,可以发现所有的字段值,如下图所示:

针对此种问题,Java的解决方案是直接使用Httpclient请求登陆的主页,使用Jsoup解析这些字段值并保存。之后,再次使用该实例化的Httpclient去提交参数。

又一点需要特别注意,为保持会话,必须使用同一个实例化的Httpclient对应进行这两次操作

问题情景2和解决方案

在一些情景中,有时会采用POST提交JSON数据

针对这种类型的处理方式很简单,如HttpClient 的处理如下:

HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead try {String jsonStr  = "{\"my\":false,\"official\":false,\"status\":1,\"pageSize\":10,\"pageNum\":1"}";HttpPost request = new HttpPost("http://yoururl");request .addHeader("content-type","application/json; charset=utf-8"); //必须添加的头StringEntity params =new StringEntity(jsonStr );request.setEntity(params);HttpResponse response = httpClient.execute(request);//handle response here...}catch (Exception ex) {//handle exception here} finally {//Deprecated//httpClient.getConnectionManager().shutdown();
}

但对于一些稍微复杂的一些网站,则会有x-csrf-token这个请求头,而这个请求头又是不容易绕过的。例如简书中的发送简信功能,如下图所示:


在表单中,输入内容,并发送。同时使用浏览器抓包,记录POST提交的内容,如:

可以看到,表单提交的内容是JSON串的形式,另外在请求头中存在x-csrf-token字段。

因此,如果直接使用上面的代码请求,输出其状态码,会发现403错误,即无法请求你的网页。

针对类似这种情况的请求,其解决方案是:

首先,利用HttpClient请求该主页,即该对话页面(当然,你要必须模拟登陆该网页才行),之后解析出csrf-token字段;接着,对实例化的HttpPost设置请求头,即添加csrf-token头,最后使用前面实例化的HttpClient执行提交参数请求,即可完成任务。

实战项目

实战项目请参考我的另外一篇博客:https://qianyang-hfut.blog.csdn.net/article/details/98436740

实战完整代码请通过本人github下载:https://github.com/soberqian/TianCrawler

网络爬虫中X-CSRF-Token和Status 403问题解决方案(Java或Python)相关推荐

  1. 浅谈网络爬虫中广度优先算法和代码实现

    前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...

  2. 盘点一个网络爬虫中常见的一个错误

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 圣朝无阙事,自觉谏书稀. 大家好, ...

  3. 浅谈网络爬虫中广度优先算法和深度优先算法

    前言 做爬虫的,最怕业务简单粗暴的来一句"爬一下XXXX网".比如,"爬一下央广网"(示例链接:http://www.cnr.cn),看着密密麻麻的各种子分类, ...

  4. 网络爬虫中进行数据抓取

    以下内容是<用python写网络爬虫>的读书笔记 一.安装firebug lite firebug lite是一个用于在网站中查看调试html,css和javascript的有效工具.它现 ...

  5. 网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包

    1 引言 在编写网络爬虫时,第一步(也是极为关键一步)就是对网络的请求(request)和回复(response)进行分析,寻找其中的规律,然后才能通过网络爬虫进行模拟.浏览器大多也自带有调试工具可以 ...

  6. 网络爬虫中的验证码识别

    网络爬虫遇到的验证码 在写网络,爬虫时,遇到很多网站存在验证码的情形,有其是比较烦的是,爬取数据的每一页都有验证码,如果只有登陆时,存在验证码,这个很好解决,只需将验证码获取后手动输入就行. 但对于每 ...

  7. 数据分析-网络爬虫:中美在这一领域展开无声较量,事关国家安全

    数据分析和网络爬虫会上升到国家安全层面 http://new.qq.com/omn/20180205/20180205A03MEP.html?pgv_ref=aio2015&ptlang=20 ...

  8. CSV文件在网络爬虫中的应用

    在上一个文章中详细的介绍了CSV文件内容的读取和写入,那么在本次文章中结合网络爬虫的技术,把数据获取到写入到CSV的文件中,其实利用爬虫的技术可以获取到很多的数据,某些时候仅仅是好玩,真正进行数据分析 ...

  9. 网络爬虫中的Unicode码解决[实例]

    unicode码 爬虫中的Unicode转中文 输出结果 unicode码 在我写爬虫的过程中,经常遇到一些网站的中文是经过Unicode转码的.在对网页进行解析时,需要将其进行转码,转为中文字符. ...

最新文章

  1. 解决Jetty Maven Plugin:Please initialize the log4j system properly(转)
  2. 科学说忘记一个人只要七年
  3. 全球项目多区域数据同步问题解决方案
  4. 索引维护存储过程(作业调用)
  5. java 转账 锁_Java多线程 多个人转账发生死锁
  6. moofs分布式存储
  7. 不显示表头_技术干货 | 基于数模混合型SoC实现的两线制高精度无源表头方案
  8. 2015年《大数据》高被引论文Top10文章No.4——关于大数据交易核心法律问题 —— 数据所有权的探讨...
  9. 图像分割数据集制作matlab,制作自己的图像语义分割数据集
  10. 微信跳转,wap浏览器跳转到微信
  11. 微信公众号报错40125
  12. Mufasa: Multimodal Fusion Architecture Search For Electronic Health Records【多模态融合架构 论文笔记】
  13. 机器学习方法之非线性回归( Logistic Regression)
  14. 加拿大计算机竞赛答案,加拿大数学和计算机竞赛.doc
  15. iOS--系统升级之后Xcode无法识别
  16. 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)
  17. Java基于JSP的网络音乐KTV点歌电台网站
  18. 剑指offer面试题之求第n个丑数
  19. 产品读书《设计中的设计》-设计
  20. JTAG和SWD调试器

热门文章

  1. 记录一些常见的沟通问题 #29
  2. Docker Compose运行MySQL、Redis服务
  3. Docker 网络-端口映射、容器链接、Networking
  4. BGP—— Confederation联邦(讲解+配置)
  5. egg框架访问 Mysql 数据库 egg-mysql 增删改查
  6. JEB 无源码调试 以dvm smali字节码方式,Demo尝试
  7. openlayers4 入门开发系列之地图工具栏篇(附源码下载)
  8. 聊聊rocketmq的ConsumerIdsChangeListener
  9. 前端 优化 json stringify 在IE浏览器的兼容性 按钮点击不生效
  10. 【mysql】显式加锁