ios网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)
优采云 发布时间: 2022-03-11 10:15ios网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)
mitmdump 可以连接 Python 脚本,可以在 Python 脚本中修改请求消息和响应消息。
安装 mitmdump
只需在命令行模式下 pip install mitmproxy
连接你的手机
将手机直接连接到计算机的 WiFi
第 1 步:将手机连接到 WiFi
第二步:点击手机WiFi中的代理设置,选择手动设置代理
第三步:服务器ip填写电脑的ip(如果不知道,在命令行模式下输入ipconfig查看),端口填写8080(默认端口)
##经过以上三步,你手机的所有网络请求和响应都会流经mitmproxy。现在我们还没有开通mitmproxy服务,所有手机暂时无法上网。
抓包
可以通过在命令行模式下键入 mitmdump 来启动 mitmproxy 服务。现在将捕获手机上的所有网络请求和响应。
##现在手机可以上网了,只要有网络请求和响应,都会显示在命令行界面。
使用 Python 脚本修改网络请求
脚本文件保存为script.py(可以使用任何文件名,只要是py后缀即可)
接下来写script.py
# 修改请求的话,函数名必须为request,参数必须为flow,不然执行不了。
# flow就是我们利用mitmproxy抓包抓取下来的请求报文。
def request(flow):
flow.request.url = 'http://httpbin.org/get'
现在启动mitmproxy服务和Python脚本,在命令行界面输入mitmdump -s script.py
虽然脚本中的函数只有一行代码,但是现在所有的网络请求url都修改为/get,你可以尝试用手机浏览器输入任意网站。(同样的情况,如果打开app,请求发送到/get,所以手机上需要联网的app现在不可用了。)
如果只是修改 url,一些 网站 会拒绝响应。您可以使用请求功能来修改更多的请求消息信息。
def request(flow):
flow.request.headers['user-agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.108 Safari/537.36 MZBrowser/7.9.6'
flow.request.headers['accept'] = '*/*'
flow.request.headers['referer'] = 'https://www.qq.com/'
flow.request.headers['accept-encoding'] = 'gzip, deflate, br'
flow.request.headers['accept-language'] = 'zh-CN,en-US;q=0.8'
flow.request.url = 'https://www.qq.com'
抓包工具如何使用,看个人需求。如果是用来实现爬虫的话,mitmproxy就和浏览器的开发者工具一样。
最基本的代码是:
import requests
def request(flow):
## 获取请求的url
url = flow.request.url
## 获取请求的headers(伪装成由手机发起请求)
headers = flow.request.headers
data = requests.get(url=url, headers=headers)
至于后面的数据怎么处理,就看个人需求了。
示例:抓取 抖音 小视频
第一步:连接手机
第 2 步:编写代码
第三步:mitmdump -s file.py
import requests
## num变量用来设置文件名
num = 1
def request(flow):
## 获取请求url和headers
url = flow.request.url
headers = flow.request.headers
global num
## 抓包之后自行观察,得出小视频的抓取逻辑
if 'ixigua' in url:
filename = str(num) + '.mp4'
resp = requests.get(url=url, headers=headers, stream=True)
with open(filename, 'wb') as f:
f.write(resp.content)
num += 1
或者您可以使用响应方法。效果与使用请求方法相同。
不同的是,如果写了request方法,手机app还没有将请求发送到“抖音服务器”(被mitmproxy拦截);
如果是response方法,此时“抖音 server”已经发回了response,我们mitmproxy截取了它的response消息,这样我们PC端就不需要再发送请求了。直接使用响应消息的正文。
## num变量用来设置文件名
num = 10000
def response(flow):
## 获取请求url
url = flow.request.url
global num
## 抓包之后自行观察,得出小视频的抓取逻辑
if 'ixigua' in url:
filename = str(num) + '.mp4'
resp = flow.response
with open(filename, 'wb') as f:
f.write(resp.content)
num += 1
一定要注意def request(flow)和def response(flow)的区别
如果在request方法中,flow.response没有返回任何内容,因为此时请求还没有被转发。
保存的只是一个空文件。
这样你就可以用手指轻点把抖音的小视频下载到电脑了。(这不是爬虫,因为不涉及自动操作,需要用手指手动操作手机屏幕,如果需要自动操作,可以使用Appium)
如果你想下载音乐什么的,原理是一样的。音乐的代码不会公布,因为它涉及版权问题。
由于 mitmproxy 不能在 Windows 中使用,所以只能使用 mitmdump。(虽然抓包功能是一样的,但是在命令行界面看mitmdump真的很晕。)可以使用charles抓包进行分析。查尔斯配置连接手机的方法是一样的。
(安卓系统和IOS系统是一样的)
1.下载查尔斯
2.在PC上下载charles证书(然后设置为“受信任的根证书”)
3.在移动端(手机)下载charles证书
4.在移动端连接局域网(然后手动设置IP和端口)
在charles中,当有流量通过时,Host会高亮显示,如下图*敏*感*词*所示,更方便分析。
分析完后使用mitmdump连接python脚本,最终可以将手机端的数据手动抓取到PC端。