当前位置:首页 > Web开发 > 正文

URL的键值参数 flow.request.query.get(‘wd‘) 取得请求参数wd的值 flow.reques

2024-03-31 Web开发

-p:变动端口,,默认为8080

改削脚本文件时,不用重启也会生效


针对 HTTP 生命周期的事件

请求:def request(self, flow: mitmproxy.http.HTTPFlow):

响应:def response(self, flow: mitmproxy.http.HTTPFlow):

其它:

def http_connect(self, flow: mitmproxy.http.HTTPFlow):

def requestheaders(self, flow: mitmproxy.http.HTTPFlow):

def responseheaders(self, flow: mitmproxy.http.HTTPFlow):

def error(self, flow: mitmproxy.http.HTTPFlow):


请求:def request(flow:flow)

flow.request.headers

获取所有头信息,包罗Host、User-Agent、Content-type等字段

flow.request.url

完整的请求地点,包罗域名及请求参数,但是不包罗放在body里面的请求参数

flow.request.host

域名

flow.request.method

请求方法:POST、GET等

flow.request.scheme

请求类型:http、https

flow.request.path

请求的路径,URL除域名之外的内容

flow.request.get_text()

请求中body的内容,有一些http会把请求参数放在body里面,可通过此要领获取,返回字典类型

flow.request.get_content()

功效如flow.request.get_text(),返回bytes类型

flow.request.raw_content

功效如flow.request.get_content(),返回bytes类型

flow.request.urlencoded_form

MultiDictView,content-type:application/x-www-form-urlencoded的请求参数,不包罗url直接带的键值参数

flow.request.multipart_form

MultiDictView,content-type:multipart/form-data

flow.request.query

返回MultiDictView类型的数据,URL的键值参数

flow.request.query.get(‘wd‘)

取得请求参数wd的值

flow.request.query.keys()

取得所有请求参数

flow.request.query.set_all(key,[value])

改削请求参数

from mitmproxy.http import flow def request(flow:flow): # 获取所有头信息,包罗Host、User-Agent、Content-type等字段 # print(flow.request.headers) # 域名 # print(flow.request.host) # 请求方法:POST、GET等 # print(flow.request.method) # 请求类型:http、https # print(flow.request.scheme) # 请求的路径,URL除域名之外的内容 # print(flow.request.path) # 请求中body的内容,有一些http会把请求参数放在body里面,可通过此要领获取,返回字典类型 # print(flow.request.get_text()) # 返回MultiDictView类型的数据,URL的键值参数 # print(flow.request.query) # 完整的请求地点,包罗域名及请求参数,但是不包罗放在body里面的请求参数 if 'https://www.baidu.com' in flow.request.url: # 取得请求参数wd的值 # print(flow.request.query.get('wd')) # 取得所有请求参数 print(list(flow.request.query.keys())) # 改削请求参数 flow.request.query.set_all('wd',['python']) # 打印改削过后的参数 print(flow.request.query.get('wd'))



响应:def response(flow: flow)

flow.response.status_code

状态码

flow.response.text

返回内容,已解码

flow.response.content

返回内容,Bytes类型

flow.response.get_text()

取得响应的文本

flow.response.set_text()

改削响应的文本

flow.response = flow.response.make(404)

返回404

from mitmproxy.http import flow import json import re def response(flow: flow): # 状态码 # print(flow.response.status_code) # 返回内容,已解码 # print(flow.response.text) # 返回内容,Bytes类型 # print(flow.response.content) # 取得响应的文本 # print(flow.response.get_text()) # 改削响应的文本 # flow.response.set_text('123') # 返回404 # flow.response = flow.response.make(404) # 改削淘宝对selenium的js检测文件 targetUrl = 'https://g.alicdn.com/AWSC/uab/122.js' if targetUrl in flow.request.url: taobao_js =flow.response.get_text() taobao_js = taobao_js.replace('!function(){function','!function (){Object.defineProperties(navigator,{webdriver: {get: () => false}})function') flow.response.set_text(taobao_js) print('已改削') # 淘宝搜索商品时,自动打印商品信息 if 'https://s.taobao.com/search' in flow.request.url: start = flow.response.text.strip().index('{') end = -2 print(json.loads(flow.response.text.strip()[start: end])['mods']['itemlist']['data']['auctions']) # 空气质量网,改削检测F12的JS # https://www.aqistudy.cn/historydata if 'https://www.aqistudy.cn/historydata/monthdata.php' in flow.request.url: js = flow.response.text js = re.sub(r'endebug.*?}\);','',js,flags=re.S) flow.response.set_text(js) print('已正常')




拦截指定数据、改削JS -- mitmproxy

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30390.html