mitmproxy -py脚本编写

原文链接 https://blog.csdn.net/qianwenjun_19930314/article/details/88227335

1、脚本编写的两个条件

​ 1.1 编写一个 py 文件供 mitmproxy 加载,文件中定义了若干函数,这些函数实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的函数
​ 1.2 编写一个 py 文件供 mitmproxy 加载,文件定义了【变量 addons】,addons 是个数组,每个元素是一个类实例,这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法。这些类,称为一个个 addon。
基本模板为

from mitmproxy import http, ctx
import json

class xxx:
	def xxx:
	def xxx

addons = [
	xxx() //类名的加载,也可以定义多个类,然后以数组的形式添加,进行加载
]

2 、脚本函数编写

​ 2.1 替换请求

from mitmproxy import ctx, http
import json

class Modify:

 	    def request(self, flow):
 	    	#替换请求链接
        	if flow.request.url.startswith("http://spay1.shuqireader.com/api/ios/info?method=priceList"):
            #有分享
            flow.request.url = "http://activity.x.xxx.xx.cn/share?id=2653&useShare=1"
            ctx.log.info("修改链接")
        		
         
addons = [
	Modify()
]

​ 2.2 修改cookies

from mitmproxy import ctx, http
import json

class Modify:

 	 def request(self, flow):
         #替换cookie,两种匹配请求链接的方式
        # if flow.request.host == "xxx.x.xxx.com.cn":
        if flow.request.url.startswith("https://xxx.x.xxx.com.cn/"):
            print(flow.request.url)
            print(flow.request.cookies)
            flow.request.cookies["_testCookie1"] = "xxx-91"
            flow.request.cookies["testCookie2"] = "123"

            req = flow.request.cookies["_testCookie1"]
            ctx.log.info(req)

addons = [
	Modify()
]

​ 2.3 修改请求参数

from mitmproxy import ctx, http
import json

class Modify:
 	 def request(self, flow):
                if flow.request.url.startswith("http://xxx.x.xxx.com.cn/customActivity/bookcode/doJoin"):
            ctx.log.info("modify request form")
            if flow.request.urlencoded_form:
                flow.request.urlencoded_form["code"] = "11111"
            else:
                flow.request.urlencoded_form = [
                    ("actId", "20727"),("nick","name")
                ]
         
addons = [
	Modify()
]

​ 2.4 修改相应状态

from mitmproxy import ctx, http
import json

class Modify:
	def response(self, flow):
		 if flow.request.url.startswith("http://baidu.com.cn"):
            flow.response = http.HTTPResponse.make(404)
            ctx.log.info("modify status code")

 addons = [
	Modify()
]

​ 2.5 修改响应体

from mitmproxy import ctx, http
import json

class Modify:
	def response(self, flow):
        if flow.request.url.startswith("https://xxx.x.xxx.com.cn/activityInfo/getPrizeInfo=="):
       		 //获取响应的json字符串,转成python对象进行解析和修改
            response = json.loads(flow.response.get_text())
            response['limitCount'] = 1
            //修改完成后,奖python对象转成json字符串,set进请求的响应体重发送给客户端
            flow.response.set_text(json.dumps(response))
            ctx.log.info('modify limitCount')

 addons = [
	Modify()
]

​ 2.6 读取json文件中字符串返回客户端

from mitmproxy import ctx, http
import json

class Modify:
	def response(self, flow):
        if flow.request.url.startswith("https://xxx.x.xxx.com.cn/activityInfo/getPrizeInfo=="):
        	//读取文件,在当前文件路径下执行脚本,否则需要写文件的绝对路径;不然会找不到该json文件
       		 with open('getStatus.json','rb') as f:
       		 	//从json文件中读取数据成python对象
                res = json.load(f)
            //将读取的python对象转成json字符串发送给客户端
            flow.response.set_text(json.dumps(res))
            ctx.log.info("modify order status")

 addons = [
	Modify()
]
上一篇:爬虫进阶:电脑软件&手机APP常用的爬虫抓包工具


下一篇:如何使用 mitmproxy 监控你的手机