1. mitmproxy工程工具包,主要包含了3个组件
- mitmproxy:拦截的http(s)记录控制台显示 【window不支持】
- mitmdump:命令行接口,可以对接python脚本,通过脚本实现监听后的处理,可定制个人需求
- mitmweb:web形式展示
2. 环境
1.Python3.6及以上 (python -V查看版本)
2.更新pip(避免部分依赖包未下载)
3.安装mitmproxy
pip install mitmproxy #安装依赖包的同时也将环境安装
3. mitmproxy关于httpflow的api说明
class mitmproxy.flow.Error(msg:str,timestamp = None ) →无
一个错误。
这不同于协议错误响应(例如,HTTP代码500),它由普通HTTPResponse对象表示。该类负责指示不符合正常协议通信的错误,例如中断连接,超时,协议错误。
揭示以下属性:
msg:描述错误时间戳的消息:自时代以来的秒数
get_state()
检索对象状态。
set_state(州)
从get_state调用返回的数据加载对象状态。
HTTP
class mitmproxy.http.HTTPRequest(first_line_format,method,scheme,host,port,path,http_version,headers,content,timestamp_start = None,timestamp_end = None,is_replay = False )
一个mitmproxy HTTP请求。
class method wrap(request )
包裹一个现有的mitmproxy.net.http.Request。
anticache()
修改此请求以删除可能产生缓存响应的头文件。也就是说,我们删除ETags和If-Modified-Since头。
anticomp()
修改此请求以删除将压缩资源数据的标题。
constrain_encoding()
基于我们可以适当解码的限制允许的接受编码值。
content
用内容编码标题解码的HTTP消息体(例如gzip)
举: 当内容编码无效且严格为True时,ValueError。
另请参阅:raw_content,text
cookies
请求Cookie。
一个空的MultiDictView物体,如果cookie怪物吃了他们全部。
decode(strict = True )
根据当前的Content-Encoding头解码主体,然后删除头。如果没有Content-Encoding标题,则不执行任何操作。
举: 当内容编码无效且严格为True时,ValueError。
encode(e )
用编码e编码,其中e是“gzip”,“deflate”,“identity”或“br”。任何现有的内容编码都被覆盖,内容未被预先解码。
举: ValueError,当指定的内容编码无效时。
first_line_format
HTTP请求表单定义在RFC7230中。
原始形式和星号形式被归为“相对”。
get_content(strict:bool = True ) →bytes
用内容编码标题解码的HTTP消息体(例如gzip)
举: 当内容编码无效且严格为True时,ValueError。
另请参阅:raw_content,text
get_text(strict:bool = True ) →typing.Union [str,NoneType]
HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
举: 当内容编码或字符集无效且strict为True时,ValueError。
另请参阅:content,raw_content
headers
消息头对象
返回: mitmproxy.net.http.Headers
host
目标主机。这可以从原始请求解析(例如,从请求行)或从代理模式推断(例如,透明模式下的IP)。GET http://example.com/ HTTP/1.1
设置主机属性还会更新主机头(如果存在)。
host_header
请求的主机/授权头。
此属性映射到request.headers["Host"]或 request.headers[":authority"]根据是HTTP / 1.x还是HTTP / 2.0。
http_version
版本字符串,例如“HTTP / 1.1”
make(method:str,url:str,content:typing.Union [bytes,str] ='',headers:typing.Union [typing.Dict [str,AnyStr],typing.Iterable [typing.Tuple [bytes,bytes] ]] =())
用于创建请求对象的简化API。
method
HTTP请求方式,例如“GET”。
multipart_form
将多部分表单数据作为MultiDictView对象。一个空的multidict.MultiDictView如果内容类型表示非表单数据或内容无法解析。
键和值是字节。
path
HTTP请求路径,例如“/index.html”。保证从斜杠开始,除了可能只是“*”的OPTIONS请求。
path_components
URL的路径组件作为字符串元组。组件不引用。
port
目标端口
pretty_host
类似于host,但使用主机头作为附加的首选数据源。这在透明模式下很有用,host只有IP地址,但可能不会反映实际的目的地,因为主机头可能被欺骗。
pretty_url
喜欢url,但使用pretty_host而不是host。
query
请求查询字符串作为MultiDictView对象。
raw_content
原始(编码)HTTP消息体
另请参阅:content,text
replace(pattern,repl,flags = 0,count = 0 )
将标头,请求路径和请求正文中的repl替换为正则表达式模式。编码内容将在更换前进行解码,然后重新编码。
返回: 更换的数量。
scheme
HTTP请求方案,应为“http”或“https”。
text
HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
举: 当内容编码或字符集无效且strict为True时,ValueError。
另请参阅:content,raw_content
timestamp_end
最后一个字节时间戳
timestamp_start
第一个字节时间戳
url
URL字符串,由请求的URL组件构成
urlencoded_form
URL编码的表单数据作为MultiDictView对象。一个空的multidict.MultiDictView如果内容类型表示非表单数据或内容无法解析。
从mitmproxy 1.0开始,键和值是字符串。
classmitmproxy.http.HTTPResponse(http_version,status_code,reason,headers,content,timestamp_start = None,timestamp_end = None,is_replay = False )
一个mitmproxy HTTP响应。
classmethodwrap(response )
包裹一个现有的mitmproxy.net.http.Response。
content
用内容编码标题解码的HTTP消息体(例如gzip)
举: 当内容编码无效且严格为True时,ValueError。
另请参阅:raw_content,text
cookies
响应饼干。一个可能是空的 MultiDictView,其中的键是cookie名字符串,值是(value,attr)元组。值是一个字符串,而attr是包含cookie属性的MultiDictView。在attrs中,一元属性(例如HTTPOnly)由Null值指示。
注意事项:
更新attr
decode(strict = True )
根据当前的Content-Encoding头解码主体,然后删除头。如果没有Content-Encoding标题,则不执行任何操作。
举: 当内容编码无效且严格为True时,ValueError。
encode(e )
用编码e编码,其中e是“gzip”,“deflate”,“identity”或“br”。任何现有的内容编码都被覆盖,内容未被预先解码。
举: ValueError,当指定的内容编码无效时。
get_content(strict:bool = True ) →bytes
用内容编码标题解码的HTTP消息体(例如gzip)
举: 当内容编码无效且严格为True时,ValueError。
另请参阅:raw_content,text
get_text(strict:bool = True ) →typing.Union [str,NoneType]
HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
举: 当内容编码或字符集无效且strict为True时,ValueError。
另请参阅:content,raw_content
headers
消息头对象
返回: mitmproxy.net.http.Headers
http_version
版本字符串,例如“HTTP / 1.1”
make(status_code:int = 200,content:typing.Union [bytes,str] = b'',headers:typing.Union [typing.Dict [str,AnyStr],typing.Iterable [typing.Tuple [bytes,bytes]] ] =())
用于创建响应对象的简化API。
raw_content
原始(编码)HTTP消息体
另请参阅:content,text
reason
HTTP原因短语,例如“未找到”。这是始终None为HTTP2请求,因为HTTP2响应不包含原因短语。
refresh(现在=无)
这个相当复杂和启发式功能刷新服务器响应重播。
它调整日期,到期和最后修改的标题。
它调整cookie过期。
replace(pattern,repl,flags = 0,count = 0 )
将消息的头文件和正文中的repl替换为正则表达式模式。编码体将在更换前进行解码,之后重新编码。
返回: 更换的数量。
status_code
HTTP状态代码,例如200。
text
HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
举: 当内容编码或字符集无效且strict为True时,ValueError。
另请参阅:content,raw_content
timestamp_end
最后一个字节时间戳
timestamp_start
第一个字节时间戳
classmitmproxy.http.HTTPFlow(client_conn,server_conn,live = None,mode ='regular' )
HTTPFlow是表示单个HTTP事务的对象的集合。
request=无
HTTPRequest 目的
response=无
HTTPResponse 目的
error=无
Error 目的
请注意,Flow可以同时具有响应和错误对象。例如,当从服务器收到响应时,可能会发生这种情况,但发送回客户端时发生错误。
server_conn=无
ServerConnection 目的
client_conn=无
ClientConnection 目的
intercepted=无
这个流程目前被截获吗?
mode=无
代理层在接收此请求时有什么模式?
backup(force = False )
保存此Flow的备份,可以恢复使用对.revert()的调用。
intercept()
拦截此流。处理将停止,直到恢复被调用。
kill()
杀死这个请求。
modified()
这个流程是否被修改?
resume()
继续流动 - 在一个intercept()之后调用。
revert()
恢复到最后备份状态。
replace(pattern,repl,* args,** kwargs )
在流的请求和响应中用repl替换正则表达式模式。编码内容将在更换前进行解码,然后重新编码。
返回所做的替换次数。
记录
类mitmproxy.log.Log(主)
中央记录器,暴露于脚本作为mitmproxy.ctx.log。
debug(txt )
使用级别调试登录。
info(txt )
记录级别信息。
alert(txt )
记录级别警报。警报与信息具有相同的紧急性,但是向交互式工具发出信号,即使用户当前没有查看事件日志,用户的注意力也应被绘制到输出。
warn(txt )
记录级别警告。
error(txt )
记录级别错误。