网页抓包

首先对于网页爬虫来说怎么抓包呢?很简单,我们直接在网页上右键点击检查或者快捷键 F12 就可以进入开发者调试工具。如果页面是经过请求接口而返回的数据的话,在 Network 中,它就会产生请求的数据,我们在这里都能捕捉到。

我们还是以之前的 P 站为例,我们点开一个接口,这个接口分为两部分,一个是请求的数据,一个是返回的数据,请求的信息主要在 Headers 里面,它主要有以下几部分,第 1 部分,General 里面主要包含了请求的链接 URL 以及他的请求方式,用的多的就是 get 和 post 了,还有请求状态码,200 表示请求接口成功。

我们来看一下 Request Headers 请求头的信息,我讲一下请求头里很重要的几个请求参数。

第一个是 Cookie,什么是cookie呢?Cookie是网站储存用户的相关的加密数据,这些数据是网站为了识别用户的身份,第一次登录的时候,你的 cookie 信息会被返回并且被网站服务器保存,请求第二个页面的时候,请求信息会带上 cookie,这样网站就能识别用户身份。当然,Cookie储存是有时效的,超过规定的时候后,cookie就失效了,网站会让你重新登录重新获取新的 cookie。所以对于需要登录才能看到数据的网站,请求接口时 cookie 参数是必须要给出的,不然就无法请求数据。

第 2个 请求参数是:Referer,这个参数是告诉网站服务器,你是从哪个页面跳转过来的,如果这个参数为空或者网址不是服务器白名单的网址,那服务器可能很快就判断你是异常请求或者爬虫了。

第 3 个比较重要的就是 user-agent,是网站用来检测你的请求是人为的还是真实的浏览器行为,我们加入 user-agent 就是为了模拟成真实的浏览器,从而“骗”过网站服务器,你不加的话,就相当于在你在人家服务器里“裸奔”,你说你在别人家地盘搞颜色,服务器不封你封谁呢?

最后是 query string parameters,因为我们这个是 get 请求,这些参数也就是请求 url 里问号后面要带的参数,比如上次讲的插画的展示模式 mode,下滑加载的页数 P,这些可以统一把它放在一个元组里。

 params = (('mode', 'rookie'),('content', 'illust'),('p', p),('format', 'json'),)

那这些分析出来了之后。那我们就是通过 requests 库来请求接口返回数据了。

response = requests.get(url, headers=headers, params=params)

你说刚才讲的那些 cookie、user-agent 等信息需要一个个自己拼写转换成 Python 代码格式也是挺繁琐,有没有更快的办法呢?答案是有的,有大佬已经制作的转换的网站了,只需 3 秒就可以搞定这些参数。

第 1 秒,copy 请求接口的 cURL。

第 2 秒,将刚才 copy 的 cURL 粘贴到转换网站,语言选择 Python(默认是Python,还支持其他的语言,共支持 14 种语言)。

https://curl.trillworks.com/

第 3 秒,把转换好的 Python requests 复制到编辑器里,headers 和 params 的详细信息都有了,是不是很快,只用 3 秒!

APP 抓包

上面分享网页抓包的方法,那怎么抓取 APP 的请求数据呢?这个我们需要下载第三方软件去搞定了,我常用的有 Charles 和 Fiddler 软件,这两款工具主要功能差不多的,任选一款就好,也听说过 Fiddler 比 charles 强大那么一点点,但是我更喜欢 Charles,因为它的界面展示的接口有层级目录感,而 Fiddler 所有接口都是并列的。

所以接下来我以 Charles 为例,讲讲 Charles 是怎么抓包的。

Charles 基础设置

在开始用 Charles 调试抓取网页或者 APP 前,我们需要对 Charles 做一些基础的设置。首先我们得在 Proxy-Proxy Setting 中设置代理端口号,默认为 8888,一般用默认的就行,除非和电脑上其他端口有冲突,然后勾选下面的容许抓取 HTTP 域名的选项。

Charles 抓包网页

Charles 不仅能抓包 APP,电脑网页也是可以抓取的,下面这张图就是我抓取的 bilibili 动画主页的请求。

抓取电脑网页前,我们只需要把 Proxy 里的 macOS Proxy 选项(Window系统显示的是 Windows Proxy)勾上就可以捕捉网页端的请求了。

Charles 下面我们可以用筛选功能让它只显示我们需要抓取的域名就行。

Charles 抓包APP

网页能抓,APP 当然也不在话下,但在抓取前需要做下简单的设置。

安装证书到移动设备

首先,我们让手机和电脑要在同一局域网下,先查看下电脑的 IP,Windows 电脑在 cmd 里输入 ipconfig 命令查看 IP,Mac 电脑在终端输入 ifconfig 查看 IP,手机的无线网里设置代理,填上刚查到的 IP 和端口号 8888。

安卓手机是在长按已连接的 wife,啊呸,wifi,勾上显示高级选项,把代理设置为手动,然后把上面电脑上的 ip 和 Charles 设置的端口号输入到主机名和端口里,点击保存。

如果手机是第一次和 Charles 连接,Charles 上会有设备接入弹窗提示,选择 Allow 同意即可。

连上之后,我们点击 Help-SSL Proxying-Install Charles Root Certificate on a Mobile Devices or Remote Browser,这时会有个弹窗。

弹窗的意思就是让在安卓设备或 ios 设备或安卓模拟器设置好代理后,然后在浏览器里输入 chls.pro/ssl 网址 去下载安装证书。

charles 下方还有一段提醒说的是 ios 10 以上的手机安装完证书后,需要在设置-通用-关于本机-证书信任设置,把刚才安装的证书信任下。

我这操作的是苹果手机,安卓手机没有信任这一步。

证书都安装完成后,操作手机上的 APP,就会抓到大量的数据信息了。

抓取数据显示 unknown 的解决办法

假如你抓取的全部数据出现 unknown 的情况,比如下面我是打开手机的哔哩哔哩APP,抓取的的全是 unknown。

这时我们需要在 Proxy-SSL Proxy Settings ,在 Host 里输入需要抓取的主域名 app.bilibili.com 和端口 443,清空抓取的数据再次打开哔哩哔哩 APP,就能看到抓取的数据了。

3秒转换成 Python请求

还是上面一样方法,3秒直接转换成我们需要的 Python 请求头。

在接口上右键 copy cURL Request

粘贴到转换网站中

headers 信息和 cookies 信息就轻松转换过来了。

Charles 其他功能

Charles 还有其他的功能,比如模拟网速,这个测试同学可能会经常用到,手机连上 Charles 代理后,在 Proxy-Throttle Settings 中设置不同的网速,可以设置弱网的环境,然后点击 start Throttling 开启,这样就可以测试 APP 在弱网情况下的反应了。

对于测试同学来说,Charles 还有个好用的功能:断点。

什么是断点呢?开发的时候,经常需要对代码进行 debug 断点调试,让程序中断在需要的地方,从而方便其分析。Charles 中的断点功能也是类似的。

这个功能主要是在测试过程中,对于有些极端的数字我们无法模拟的情况下,我们给这个接口的主域名上设置断点,修改该接口的请求或者返回信息也就是假传圣旨后再发给服务器。

举个例子,比如测试贷款业务,显示贷款金额,比如最大金额是 1 个亿,假如测试中这个数据不好造,但我们需要测试下最大金额时页面显示的情况,是否会被截断或者不显示,这时可以借助断点,改变金额后返回给页面,页面显示的就是你修改之后的数据了。

最后,断点结束后,记得关闭断点,还有,电脑上的 Charles 抓包工具关闭时,记得将手机上的代理关闭,否则手机会上不了网。

在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

网页或APP抓包请求参数有什么意思,怎么更快的抓包获取这些请求相关推荐

  1. SpringMVC自动将请求参数和入参对象的属性进行一一绑定;要求请求参数的名字和javaBean入参的对象里面的属性名是一样的||员工的增删改查案例

    SpringMVC自动将请求参数和入参对象的属性进行一一绑定:要求请求参数的名字和javaBean入参的对象里面的属性名是一样的 1.SpringMVC中配置HiddenHttpMethodFilte ...

  2. 比ewsa更快的跑包工具_重庆单肩包订购,编织布袋定做厂家

    上海甜芬皮具箱包有限公司为您详细解读LIWymo重庆单肩包订购的相关知识与详情,环保型包拆袋,气息很小以至闻不到任何气息,而一些欠好的包拆袋会散发出刺鼻的气息,那样的包拆袋无法购置.当条件允许时,少量 ...

  3. python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...

    在Python中使用Request对象时出现错误. 下面是我的代码. class APIDOC(Document): def request_api(self): method_type = self ...

  4. 求你了,别再问我网页或APP抓包了!

    公众号后台回复"图书",了解更多号主新书内容 ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 作者:pk哥 来源:Python知识圈 这半个月,pk 哥 在 B 站上传了两个 ...

  5. Spring MVC 接收请求参数所有方式总结!

    来源:简书,作者:zhrowable 链接:https://www.jianshu.com/p/5f6abd08ee08 SpringMVC请求参数接收 其实一般的表单或者JSON数据的请求都是相对简 ...

  6. Express请求处理-GET和POST请求参数的获取

    场景 Node的Web应用框架Express的简介与搭建HelloWorld: Node的Web应用框架Express的简介与搭建HelloWorld_霸道流氓气质的博客-CSDN博客 注: 博客: ...

  7. 跳槽涨薪技术之python+pytest接口自动化(6)-请求参数格式的确定

    [文章末尾给大家留下了大量的福利] 我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请 ...

  8. Android添加Header请求参数实例,java响应header请求实现demo

    1.首先添加AsyncHttpClient.jar包到libs文件夹下 2.初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHtt ...

  9. java参数action_Struts2之Action接收请求参数和拦截器详解

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的A ...

最新文章

  1. 如何实现少样本学习?先让神经网络get√视觉比较能力
  2. SpringBoot与MyBatis技术集成
  3. eclipse lombok 标红_无法使Lombok项目在Eclipse上运行
  4. 搞懂webdriver的底层原理,才敢说自己懂自动化!
  5. 《软件工程》总结——第四章
  6. 【LeetCode】【字符串】题号:*481. 神奇字符串
  7. 灰度直方图匹配(灰度直方图规定化)matlab代码
  8. 19、删除链表的倒数第N个节点(python)
  9. win7的附件计算机没了,win7系统附件工具不见了的解决方法
  10. 左程云 Java 笔记--二叉树
  11. 百度火星坐标转wgs84
  12. 蓝牙电话之PBAP同步电话簿协议分析
  13. 神舟战神G8-CA7NP怎么样?测评值得买吗?
  14. Your hostname, xxx resolves to a loopback address: 127.0.1.1; using x.x.x.x instead(on interface xx)
  15. 2022数模国赛B题无人机第一题第一小问的简单编程
  16. (车载网络-读书笔记)Source Identification Using Signal Characteristics in Controller Area Networks
  17. mysql安装报错181012_安装MySQL时提示requires .NET Framework 4. 0错误
  18. objective_c札记
  19. 卷尺精度标准_卷尺检验技术标准
  20. 秋裤传奇html5,匈牙利门神不服老 基拉利,一条秋裤写传奇

热门文章

  1. java与道德经总章一些感悟
  2. 解决IE6,IE7,IE8换行显示问题
  3. mysql修改初始密码/ 重置默认密码 You must reset your password using ALTER USER statement
  4. 知乎热议: Java, Go和Python那个前景好?
  5. gpa计算器java代码_GP中的GPA计算器帮助
  6. 关于 IO、存储、硬盘和文件系统
  7. Linux下的硬盘信息查看
  8. 学完java基础语法之后用来练习的不依赖框架的小项目
  9. bios基本输入输出系统
  10. C++变量的引用 | 使用变量的引用