- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想实现一个拦截 http 和 https 请求的代理服务器。我遇到了 libmproxy ( http://mitmproxy.org/doc/scripting/libmproxy.html ),它支持 SSL。我从这个最简单的代理开始,它只打印所有请求和响应的 header ,并正常将它们转发给客户端和服务器。
#!/usr/bin/env python
from libmproxy import controller, proxy
import os
class Master(controller.Master):
def __init__(self, server):
controller.Master.__init__(self, server)
self.stickyhosts = {}
def run(self):
try:
return controller.Master.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, msg):
print "handle request.................................................."
print msg.headers
msg.reply()
def handle_response(self, msg):
print "handle response................................................."
print msg.headers
msg.reply()
config = proxy.ProxyConfig(
cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
)
server = proxy.ProxyServer(config, 1234)
m = Master(server)
m.run()
然后我在 firefox 中将 http 和 ssl 代理配置为 127.0.0.1 端口 1234。http 似乎工作正常,因为我可以看到所有 header 都已打印出来。但是,当浏览器发送https请求时,代理服务器根本不打印任何东西,浏览器显示“连接中断”错误。
进一步调查显示 https 请求通过代理服务器而不是 controller.Master。我看到当有 https 请求时正在调用 proxy.ProxyHandler.establish_ssl(),但请求不会通过 controller.Master.handle_request()。尽管调用了 establish_ssl() ,浏览器似乎没有得到任何响应。我用 https://www.google.com 测试了这个.
首先,如何使 proxy.ProxyHandler 正确处理 https 请求/响应?二、如何修改controller.Master使其可以拦截https请求?我也愿意使用其他工具,我可以在其上构建自定义 http/https 代理服务器。
最佳答案
您需要在用于测试的浏览器中安装 mitmproxy CA。
请在此处查看详细信息(“安装 mitmproxy CA”部分):
http://mitmproxy.org/doc/ssl.html
这解决了我的问题。
关于ssl - 如何使用 libmproxy 处理 https 流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790356/
我想实现一个拦截 http 和 https 请求的代理服务器。我遇到了 libmproxy ( http://mitmproxy.org/doc/scripting/libmproxy.html ),
我终于将我的 Python 版本从 2.7 升级到 3.6.1,同时也将我的 mitmproxy 从旧的和良好的 v0.16 升级到最新版本。 我曾经使用 libmproxy 来处理使用以下语法通过代
目前正在使用 libmproxy ,它又使用 telnetlib , 向 HTTPS 网页发出请求。但是,出现以下错误: Error: [('SSL routines', 'SSL3_READ_BYT
我是一名优秀的程序员,十分优秀!