mitmdump
是mitmproxy的命令行接口,比Fiddler、Charles等工具方便的地方是它能够对接Python脚本。 有了它咱们能够不用手动截获和分析HTTP请求和响应,只需写好请求和响应的处理逻辑便可。 它还能够实现数据的解析、存储等工做,这些过程均可以经过Python实现。python
使用命令git
mitmdump -w crawl.txt
复制代码
其中 crawl.txt 能够为任意文件名,就能够保存相应的结果了程序员
mitmdump -s script.py
复制代码
script.py 文件中编写以下代码github
# 修改UA
def request(flow):
flow.request.headers['User-Agent'] = 'MitmProxy'
print(flow.request.headers)
复制代码
在夜神模拟器中打开http://httpbin.org/get
出现以下内容 web
手机惠农APP
,看一下如何去捕获相应的请求
这个地方千万不要单独依赖mitmdump,要不你会直接卡死的,你能够采用mitmweb,打开APP以后,等待一会,点击一个菜单进入。好比点击下面的供应大厅。 mongodb
脚本主要有两部分构成,数据获取与数据存储,数据获取要注意,当访问的url匹配到刚才的地址的时候,就表示能够进行处理了json
from mitmproxy import ctx
import json
import pymongo
# def request(flow):
# #flow.request.headers['User-Agent'] = 'MitmProxy'
# print(flow.request.headers)
def response(flow):
start_url = "https://truffle.cnhnb.com/banana/supply/query/list"
response = flow.response
info = ctx.log.info
if flow.request.url.startswith(start_url):
text = response.text
data = json.loads(text)
save(data)
def save(data):
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP, DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.huinong # 准备插入数据
print(data["data"]["datas"])
collection.insert_many(data["data"]["datas"])
复制代码
注意,如今尚未设置手机自动操做,因此操做是我手动滑动的。左侧数据已经成功的捕获到了。python爬虫
数据存储到mongodb中,在处理就比较简单了工具
mitmdump提供了专门的日志输出功能,能够设定不一样级别以不一样颜色输出结果。 ctx模块有log功能,调用不一样的输出方法就能够输出不一样颜色的结果,以方便咱们作调试。ui
ctx.log.warn(str(flow.request.query))
ctx.log.error(str(flow.request.headers))
复制代码
更多的脚本例子,能够去参考。
https://github.com/mitmproxy/mitmproxy/tree/master/examples/simple
后续,咱们将尝试将刚才的手动滑动修改为自动操做......
欢迎关注 非本科程序员 公众帐号