手机网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)

优采云 发布时间: 2021-11-24 00:12

  手机网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)

  mitmdump 可以与 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拦截);

  如果是响应方式,此时“抖音server”已经发回了响应,我们的mitmproxy拦截了它的响应消息,这样我们的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)的区别

  如果在请求方法中,flow.response 没有返回任何内容,因为请求还没有被转发。

  保存的只是一个空文件。

  这样就可以用手指将抖音的小视频下载到电脑上。(这不是爬虫,因为不涉及自动操作,需要用手指手动操作手机屏幕,如果需要自动操作,可以使用Appium)

  如果你想下载音乐什么的,同样的原则也适用。音乐代码不会公开,因为它涉及版权问题。

  由于mitmproxy在windows下不能用,所以只能用mitmdump(虽然抓包功能是一样的,但是命令行界面的mitmdump真的很晕)可以用Charles抓包分析,Charles配置连接到电话。方法是一样的。

  (Android系统和IOS系统是一样的)

  1.下载查尔斯

  2.PC下载Charles证书(然后设置为“受信根证书”)

  3.在移动端(手机)下载Charles证书

  4.在移动端连接局域网(然后手动设置IP和端口)

  在Charles中,当有流量通过时,Host会高亮显示,如*敏*感*词*所示,更便于分析。

  

  经过分析,使用mitmdump对接python脚本,最后就可以手动抓取手机端的数据到PC端了。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线