mitmproxy+python做拦截代理,自动生成接口测试用例

1.mitmproxy安装

  python版本3.6以上,输入安装命令pip3 install mitmproxy

  安装完成后输入命令mitmdump --version验证

  应当可以看到类似于这样的输出:

  

 2.编写py代码,定义addons

import mitmproxy.http
from mitmproxy import ctx


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow: mitmproxy.http.HTTPFlow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)


addons = [
    Counter()
]

3.启动mitmweb

  输入命令 mitmweb -s addons.py

  

   request就是在请求阶段拦截,并自定义自己想要输入的信息,其他详情方法见文末

4. 启动谷歌作为代理浏览器进行监听

  打开 cmd,执行:

    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors

  这样在谷歌浏览器进行的接口访问,就会被记录下来

HTTP生命周期介绍

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

  (Called when) 收到了来自客户端的 HTTP CONNECT 请求。在 flow 上设置非 2xx 响应将返回该响应并断开连接。CONNECT 不是常用的 HTTP 请求方法,目的是与服务器建立代理连接,仅是 client 与 proxy 的之间的交流,所以 CONNECT 请求不会触发 request、response 等其他常规的 HTTP 事件。

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

  (Called when) 来自客户端的 HTTP 请求的头部被成功读取。此时 flow 中的 request 的 body 是空的。

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

  (Called when) 来自客户端的 HTTP 请求被成功完整读取。

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

  (Called when) 来自服务端的 HTTP 响应的头部被成功读取。此时 flow 中的 response 的 body 是空的。

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

  (Called when) 来自服务端端的 HTTP 响应被成功完整读取。

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

  (Called when) 发生了一个 HTTP 错误。比如无效的服务端响应、连接断开等。注意与“有效的 HTTP 错误返回”不是一回事,后者是一个正确的服务端响应,只是 HTTP code 表示错误而已。

 

mitmproxyHTTPFlow 对象包含了关于 HTTP 请求和响应的详细信息。以下是一些常用的属性:

请求相关(flow.request):

  • flow.request.method: HTTP 请求方法(如 "GET", "POST" 等)。
  • flow.request.url: 完整的请求 URL。
  • flow.request.scheme: 请求使用的协议(如 "http" 或 "https")。
  • flow.request.host: 请求的目标主机名。
  • flow.request.port: 请求的目标端口。
  • flow.request.path: 请求的路径。
  • flow.request.http_version: HTTP 版本。
  • flow.request.headers: 请求头,一个包含所有 HTTP 请求头的字典。
  • flow.request.cookies: 请求中的 cookies。
  • flow.request.content: 请求体的内容。
  • flow.request.query: 查询参数。
  • flow.request.timestamp_start: 请求开始的时间戳。
  • flow.request.timestamp_end: 请求结束的时间戳。

响应相关(flow.response):

  • flow.response.status_code: HTTP 响应状态码(如 200, 404 等)。
  • flow.response.reason: HTTP 响应的原因短语(如 "OK", "Not Found" 等)。
  • flow.response.headers: 响应头,一个包含所有 HTTP 响应头的字典。
  • flow.response.cookies: 响应中的 cookies。
  • flow.response.content: 响应体的内容。
  • flow.response.timestamp_start: 响应开始的时间戳。
  • flow.response.timestamp_end: 响应结束的时间戳
posted @ 2023-08-24 14:40  7dao  阅读(552)  评论(0编辑  收藏  举报