跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 用 Python 的 mitmproxy 库做请求拦截、修改时遇到’NoneType’ object has no attribute ‘text’
未分類
10 9 月 2020

用 Python 的 mitmproxy 库做请求拦截、修改时遇到’NoneType’ object has no attribute ‘text’

用 Python 的 mitmproxy 库做请求拦截、修改时遇到’NoneType’ object has no attribute ‘text’

資深大佬 : ikamu 5

期望:在本地程序发起的请求到达本地代理时做出修改,直接返回给目标程序,不再到达服务器。 mitmproxy==5.0.1,python==3.6.1, 程序结构:

class MyAdd:     def request(self, flow):         # do something in request         if "pan.baidu.com" in flow.request.pretty_url:                         flow.kill()                      if "test_kkk.cn" = flow.request.host:             with open('./init') as f_init:                 flow.response.text = f_init.read()                 flow.response.status_code = 200                      def response(self, flow):         if "baidu.com" not in flow.request.pretty_url:             print(flow.response.text) 

报错

    flow.response.text = f_init.read() AttributeError: 'NoneType' object has no attribute 'text' 

而如果把 if “test_kkk.cn” = flow.request.host 放到 response 函数下则能正确修改,但不能满足“直接返回给目标程序,不再到达服务器”的要求。 该怎么实现呢

大佬有話說 (6)

  • 資深大佬 : ljhaoboy

    https://github.com/mitmproxy/mitmproxy/blob/v0.9.2/examples/redirect_requests.py
    康康这个,好像是符合你的要求的

  • 資深大佬 : xiaolinjia

    虽然没用过这个库,不过看报错就是因为 flow.response=None 。
    于是推测原因是,在 request 方法里,这库还没有给 flow.response 对象实例化。
    然后问题又来了,不到达服务器,又怎么有 response 响应呢?

  • 資深大佬 : xiaolinjia

    @xiaolinjia 看了下上,自己在 request 方法里实例化个 flow.Response 对象应该是可行的。

  • 主 資深大佬 : ikamu

    @ljhaoboy 看了下这个库,有点老以至于很多类的位置不再与目录文件对应。

    @xiaolinjia 出现问题的原因明白了,得在某处实例个 flow.Response 对象,这个依旧有点不知该在哪添。

  • 主 資深大佬 : ikamu

    结局:顺着一的链接中找到了新版的,https 。。。github 。com/mitmproxy/mitmproxy/blob/v5.x/examples/addons/http-reply-from-proxy.py 。虽然和实例个 flow.Response 对象,然后用 flow.response.text 进行赋值的预期目标有区别,但还算是符合。
    “`
    def start():
    Addon = MyAdd()
    options = Options(listen_host=’127.0.0.1′, listen_port=8080)
    config = ProxyConfig(options)
    m = DumpMaster (options)
    m.server = ProxyServer(config)
    m.addons.add(Addon)
    m.run()
    “`
    调用方式,期待其他答案。

  • 主 資深大佬 : ikamu

    方法找到了:添加 flow.response = http.HTTPResponse.make()
    “`
    from mitmproxy import http

    flow.response = http.HTTPResponse.make()
    if “test_kkk.cn” = flow.request.host:
    with open(‘./init’) as f_init:
    flow.response.text = f_init.read()
    flow.response.status_code = 200
    “`

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具