【问题标题】:MITM Proxy, getting entire request and response stringMITM 代理,获取整个请求和响应字符串
【发布时间】:2015-02-20 10:02:10
【问题描述】:

我正在使用 mitmproxy 拦截流量。我想要的是能够在一个字符串中获取整个请求和响应。我知道您有 def response(context, flow) 并且 HTTPFlow 对象具有请求和响应对象。我想要的只是一个字符串中这样的东西

GET http://www.google-analytics.com/collect?v=1& HTTP/1.1
Header 1: value
Header 2: value

request body

还有这个

HTTP/1.1 301 Moved Permanently
Header 1: value
Header 2: value

response body

现在我一直在尝试通过连接请求和响应的不同部分和位来进行此操作,但这很容易出错。有没有更好的方法来做到这一点?

另外,mitm 是否处理 Gzip 编码的响应体?

【问题讨论】:

    标签: python proxy mitmproxy


    【解决方案1】:

    如果有人碰到这个;上面的答案不适用于 mitmproxy 4。相反,可以使用这个:

    from mitmproxy.net.http.http1.assemble import assemble_request
    
    def response(flow):
        print(assemble_request(flow.request).decode('utf-8'))
    

    【讨论】:

    • 谢谢你
    【解决方案2】:

    您可以使用flow.request.assemble() 将整个请求/响应对象作为字符串获取。如果你想要请求/响应没有传输编码(gzip),你可以使用解码的装饰器:

    from libmproxy.protocol.http import decoded
    
    with decoded(flow.request):
        data = flow.request.assemble()
    

    除此之外,您可能会发现https://github.com/mitmproxy/mitmproxy/tree/master/examples 非常有用。

    【讨论】:

    • 请求是否被编码过?我对响应使用了解码,但我认为请求不需要它。
    • 传输编码可能适用于请求和响应。例如,您可以上传 gzipped 文件。不确定这有多普遍,但它肯定是有效的 HTTP。
    • 我收到以下错误:“from libmproxy.protocol.http import decoded ImportError: cannot import name decoded”
    猜你喜欢
    • 2014-02-24
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2014-07-19
    • 2021-09-03
    • 2017-11-08
    相关资源
    最近更新 更多