Python3自定义http/https请求拦截mitmproxy脚本
[本文出自天外归云的博客园]
脚本内容
代码如下:
from mitmproxy import http, ctx
from multiprocessing import Lock class Filter:
def __init__(self, filter_info):
self.log_info = ""
self.mutex = Lock()
self.filter_info = filter_info
self.response_file = None
self.switch_on = False
self.log_file = "log.txt" def log(self, info) -> None:
self.log_info += f"{info}\n\n" def write_log(self, mode="w+") -> None:
self.mutex.acquire()
with open(self.log_file, mode) as f:
f.write(self.log_info)
self.mutex.release() def is_target_flow(self, flow: http.HTTPFlow) -> bool:
for info in self.filter_info:
if info["str_in_url"] in flow.request.url:
self.log_file = info["log_file"]
self.switch_on = info["switch_on"]
if info["response_file"] != None:
self.response_file = info["response_file"]
return True
else:
return False def modify_response(self, flow: http.HTTPFlow) -> http.HTTPFlow:
if self.switch_on and self.response_file:
with open(self.response_file, "r") as f:
flow.response.content = f.read().encode()
return flow def request(self, flow: http.HTTPFlow) -> None:
if self.is_target_flow(flow):
self.log_info = ""
self.log(f"——METHOD——\n{flow.request.method}")
self.log(f"——HOST——\n{flow.request.pretty_host}")
self.log(f"——URL——\n{flow.request.pretty_url}")
query = [i + ":" + flow.request.query[i] + "\n" for i in flow.request.query]
self.log(f"——QUERY STRING——\n{''.join(query)}")
if flow.request.urlencoded_form:
form = [i + ":" + flow.request.urlencoded_form[i] + "\n" for i in flow.request.urlencoded_form]
self.log(f"——FORM——\n{''.join(form)}")
self.write_log() def response(self, flow: http.HTTPFlow) -> None:
if self.is_target_flow(flow):
self.log_info = ""
self.log(f"——RESPONSE before modified——\n{flow.response.content.decode()}")
flow = self.modify_response(flow)
self.log(f"——RESPONSE after modified——\n{flow.response.content.decode()}")
self.write_log(mode="a") filter_info = [
{
"str_in_url": "getSimpleNews",
"log_file": "getSimpleNews_log.txt",
"switch_on": True,
"response_file": "getSimpleNews_response.txt",
},
{
"str_in_url": "getQQNewsComment",
"log_file": "getQQNewsComment_log.txt",
"switch_on": True,
"response_file": None,
}
]
addons = [
Filter(filter_info)
]
使用方法
运行mitmproxy指定使用该脚本和端口号即可:
mitmproxy -p -s xxx.py
在mitmproxy运行时:
1. 会拦截url中包含str_in_url字符串的请求
2. 会把response.content修改为当前mitm运行所在目录下的response_file文件中的内容
3. 打印信息在当前mitm运行所在目录下的log_file文件中
4. 如果无需修改response设置switch_on为False即为开关关闭
5. 如果不修改response的话response_file需要写None
Python3自定义http/https请求拦截mitmproxy脚本的更多相关文章
- python2/3 发送https请求时,告警关闭方法
问题: 使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误: InsecureRequestWarning: Unverifi ...
- Python3 自定义请求头消息headers
Python3 自定义请求头消息headers 使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设 ...
- HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端
HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端 发表时间:2020-03-05 1 ...
- SpringBoot 拦截器和自定义注解判断请求是否合法
应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...
- Python常见问题 - python3 使用requests发送HTTPS请求报certificate verify failed 错误
当你使用 requests 发送HTTPS请求时 requests.get(url, parmas=parmas, headers=header, cookies=cookie) 出现了以下错误 HT ...
- Python3 网络爬虫(请求库的安装)
Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...
- 抓包神器Fiddler之Https请求随心转
随着AppleStore对APP的审核越来越严格,客户端请求服务端API的方式大多数都变更为了https,在更安全的同时又引起了另外一个问题——本地抓包开发调试的不便. 一般来说,我们在开发API的时 ...
- python接口自动化(十二)--https请求(SSL)(详解)
简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...
- 基于 HTTP 请求拦截,快速解决跨域和代理 Mock
近几年,随着 Web 开发逐渐成熟,前后端分离的架构设计越来越被众多开发者认可,使得前端和后端可以专注各自的职能,降低沟通成本,提高开发效率. 在前后端分离的开发模式下,前端和后端工程师得以并行工作. ...
随机推荐
- 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)
题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...
- POJ-1456 Supermarket 销售商品【贪心】+【并查集】
题目链接:http://poj.org/problem?id=1456 题目大意: 有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售处,就能得到相应的利润,并且销售该商品需要1天 ...
- python命令行解析模块--argparse
python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...
- anaconda3下配置python-3.5+tensorflow-gpu-1.9.0人脸识别项目环境
https://www.cnblogs.com/31415926535x/p/10620732.html 之前为了配置tensorflow-gpu的环境又是装cuda,又是装cudnn,还有tenso ...
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...
- python3基础之文件对象操作
1.向文本文件中写入内容 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' # 需要写入文件的字符串 print('显示需要写入的内容:\n{0:s}'.format ...
- 2007 ACM 平方和立方和
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2007 注意审题就好,x可以>y; #include<stdio.h> int main( ...
- Android工程运用阿里freeline10秒快速编译分享
git地址:https://github.com/alibaba/freeline 目前已经更新到0.6.0版本. 原来编译一次需要几分钟甚至几十分钟的android工程,运用freeline,1分钟 ...
- oracle 语句 笔记
1.查询某个表有多少列. select column_name from user_tab_columns where table_name = 'DQ_S1'; 列出所有的字段名. 2.查询昨天一天 ...
- 通过ZwQuerySystemInformation获取EPROCESS
google一下,发现很多都是直接通过ZwQuerySystemInformation通过11号获取进程结构SYSTEM_PROCESS_INFORMATION,对于详细的进程信息表达不够.所以想要通 ...