发生 Http 错误时无法切换上游代理
Can't switch Upstream Proxy when Http Error occur
问题描述
当我尝试使用 flow.live.change_upstream_proxy_server(address)
将 Error()
方法中的上游代理从 HttpEvents 切换时,上游代理保持不变并且不会改变。
我的代码基于 this 示例。
重现该行为的步骤:
- 使用上游和脚本启动 Mitm:
mitmdump --mode upstream:182.52.74.76:34084 --ssl-insecure -s scripts/watcher.py
- 等待上游代理失败
- 让watcher.py更新上游代理
当前结果:
(无法post直接图片,因为缺乏声誉)
https://i.imgur.com/vyz2bq3.png
此时我们假设上游代理现在改为103.199.84.54:8080
,但是当我们重新请求时,在报错信息中可以看到代理还是原来的(182.52.74.76:34084
) 而不是 103.199.84.54:8080
:
https://i.imgur.com/WkWFyBJ.png
Watcher.py
from mitmproxy import http
from mitmproxy import ctx
import requests
import json
import typing
#***** Some fetching to get new proxy from my API*****
def getNewProxy() -> typing.Tuple[str, int]:
id = str(getRandID())
params = { 'id': 'eq.' + id, 'select': 'proxy'}
response = str(requests.get(url = url, params = params).json()[0]['proxy'])[7:].split(':')
proxIP = (response[0], int(response[1]))
return (proxIP)
class Events:
def error(self, flow: http.HTTPFlow):
ctx.log.info(str(flow.server_conn.address))
pAddr = getNewProxy()
ctx.log.info("Switching upstream proxy to: " + pAddr[0] + ":" + str(pAddr[1]))
flow.live.change_upstream_proxy_server(pAddr)
addons = [
Events()
]
系统信息
mitmproxy --version:
$ mitmdump --version
Mitmproxy: 5.2
Python: 3.7.3
OpenSSL: OpenSSL 1.1.1g 21 Apr 2020
Platform: Linux-4.19.0-9-amd64-x86_64-with-debian-10.4
感谢您的帮助,现在真的很烦这个问题!
原来Mitproxy本身暂时不支持重试请求
参见 this。
问题描述
当我尝试使用 flow.live.change_upstream_proxy_server(address)
将 Error()
方法中的上游代理从 HttpEvents 切换时,上游代理保持不变并且不会改变。
我的代码基于 this 示例。
重现该行为的步骤:
- 使用上游和脚本启动 Mitm:
mitmdump --mode upstream:182.52.74.76:34084 --ssl-insecure -s scripts/watcher.py
- 等待上游代理失败
- 让watcher.py更新上游代理
当前结果:
(无法post直接图片,因为缺乏声誉)
https://i.imgur.com/vyz2bq3.png
此时我们假设上游代理现在改为103.199.84.54:8080
,但是当我们重新请求时,在报错信息中可以看到代理还是原来的(182.52.74.76:34084
) 而不是 103.199.84.54:8080
:
https://i.imgur.com/WkWFyBJ.png
Watcher.py
from mitmproxy import http
from mitmproxy import ctx
import requests
import json
import typing
#***** Some fetching to get new proxy from my API*****
def getNewProxy() -> typing.Tuple[str, int]:
id = str(getRandID())
params = { 'id': 'eq.' + id, 'select': 'proxy'}
response = str(requests.get(url = url, params = params).json()[0]['proxy'])[7:].split(':')
proxIP = (response[0], int(response[1]))
return (proxIP)
class Events:
def error(self, flow: http.HTTPFlow):
ctx.log.info(str(flow.server_conn.address))
pAddr = getNewProxy()
ctx.log.info("Switching upstream proxy to: " + pAddr[0] + ":" + str(pAddr[1]))
flow.live.change_upstream_proxy_server(pAddr)
addons = [
Events()
]
系统信息
mitmproxy --version:
$ mitmdump --version
Mitmproxy: 5.2
Python: 3.7.3
OpenSSL: OpenSSL 1.1.1g 21 Apr 2020
Platform: Linux-4.19.0-9-amd64-x86_64-with-debian-10.4
感谢您的帮助,现在真的很烦这个问题!
原来Mitproxy本身暂时不支持重试请求
参见 this。