mitmproxy 抓包神器-4.拦截请求实现篡改请求和返回数据

  • Post author:
  • Post category:其他

前言

fiddler 工具有个打断点功能非常实用,可以实现拦截请求,篡改请求和返回的数据。
mitmproxy 可以用python代码写插件的方式实现拦截请求,篡改请求和返回数据。

fiddler 打断点

before response:这个是打在request请求的时候,未到达服务器之前

after response:也就是服务器响应之后,在Fiddler将响应传回给客户端之前。

拦截到请求就可以在工具上修改请求和返回的数据了

拦截请求

request(flow) 方法可以拦截请求,并且能获取请求参数,修改请求参数

from mitmproxy import http
# 作者:上海-悠悠 微信号:283340479

def request(flow: http.HTTPFlow):
    # 拦截请求地址
    if "http://httpbin.org/get" in flow.request.url:
        print('请求方法', flow.request.method)
        print('请求类型', flow.request.scheme)
        print('请求url', flow.request.url)
        # 获取url 键值对请求参数
        print(flow.request.query)
        # 取得所有请求参数
        print(list(flow.request.query.keys()))
        # 修改请求参数
        flow.request.query.set_all('yoyo', ['python'])
        # 打印修改过后的参数
        print(flow.request.query.get('yoyo'))

在浏览器上访问http://httpbin.org/get?yoyo=123&key=hello 地址

打印结果

请求方法 GET
请求类型 http
请求url http://httpbin.org/get?yoyo=123&key=hello
MultiDictView[('yoyo', '123'), ('key', 'hello')]
['yoyo', 'key']
python

会发现请求参数yoyo的值已经改成了python

mock 返回内容

response(flow) 方法可以拦截到返回的数据,对返回的数据修改后返回

from mitmproxy import http
# 作者:上海-悠悠 微信号:283340479

def response(flow: http.HTTPFlow):
    if "http://httpbin.org/get" in flow.request.url:
        # 状态码
        print(f'状态码: {flow.response.status_code}')
        # 返回内容,已解码
        print(f'返回内容: {flow.response.text}')
        # 返回内容, bytes类型
        print(f'返回内容bytes类型: {flow.response.content}')
        # 取得响应的文本
        print(f'应的文本: {flow.response.get_text}')
        # 修改响应 的文本
        flow.response.set_text('{"code": 0, "message": "success"}')

浏览器上访问http://httpbin.org/get?yoyo=123&key=hello 时,返回内容已经是set_text() 指定的内容了


版权声明:本文为qq_27371025原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。