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

ikamu:期望:在本地程序发起的请求到达本地代理时做出修改,直接返回给目标程序,不再到达服务器。
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 函数下则能正确修改,但不能满足“直接返回给目标程序,不再到达服务器”的要求。
该怎么实现呢

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
```

IBMYES 已经 NO 了

rhotov:上周开始 IBM Cloud CF 容器连不上了,这周收到邮件帐号直接被 cancel 了。 看了看 IBMYES,果然倒了。

无法将Summernote值存储到数据库中,它返回[object Object] - php

我试图用ajax / jquery将summernote值存储到数据库中,但是它只是将此值发送到数据库字段-----> [object Object]。HTML:<div class="form-group"> <label for="description">Desciption<…

在Sublime Text 3插件中获取当前行 - python

我正在为Sublime Text 3写一个简单的插件,需要获取当前所选行的内容。我可以用selection = sublime.Region(self.view.sel()[0].begin(), self.view.sel()[0].end()) 获取当前突出显示的部分,但是有没有一种方法可以选择或返回整个当前行的内容,而无需手动选择全部?this pag…

Sublime Text-断点时的Python环境 - python

有没有一种方法可以在Sublime Text中配置该功能(例如,存在于PyCharm上),使您可以在代码中具有当前变量上下文的断点时使用python解释器控制台? (我知道您可以获得PDB控制台,但是我指的是功能完善的python控制台解释器)最好。 参考方案 它有一些debuggers,但是看起来很老旧而且很笨拙。当前只有与PyCharm进行免费,全面的比…

jQuery $ .get()数组返回[object Object] - php

test.php包括以下内容:echo json_encode( array( array("name"=>"John","time"=>"2pm"), array("name"=>"2","time"…