我正在尝试使用Tcl和http模块通过tls进行HTTPS调用,我想用mitmproxy查看调用本身。
我首先安装了mitmproxy,安装了其证书,并通过指向Firefox在localhost:8080使用代理来验证它运行正常。我可以在mitmproxy中查看所有https调用,并可以在浏览器中看到正确的响应。
我现在正在尝试使以下代码在mitmproxy上正常工作:
package require http
package require tls
http::register https 443 tls::socket
http::config -proxyhost localhost
http::config -proxyport 8080
set token [http::geturl "https://google.com"]
set resp [http::data $token]
http::cleanup $token
puts $resp
http::unregister https
如果我没有两行http::config
来设置代理,则脚本可以正常工作。但是,如果确实有这两行,则会得到以下提示:
<html>
<head>
<title>502 Bad Gateway</title>
</head>
<body>
<h1>502 Bad Gateway</h1>
<p>ProtocolException('Cannot connect to server, no server address given.')</p>
</body>
</html>
mitmproxy在UI中向我显示了类似的错误。
我还尝试过export http_proxy=http://localhost:8080/
和将http
更改为https
的排列,然后执行以下操作:
package require http
package require tls
package require autoproxy
autoproxy::init
http::register https 443 autoproxy::tls_socket
set tok [http::geturl https://google.com/]
set data [http::data $tok]
puts $data
我得到类似的答复:
<html>
<head>
<title>502 Bad Gateway</title>
</head>
<body>
<h1>502 Bad Gateway</h1>
<p>TlsProtocolException("Cannot establish TLS with google.com:443 (sni: None): TlsException('Cannot validate certificate hostname without SNI')")</p>
</body>
</html>
我必须相信,我没有使用tcl在应有的请求中发送某些内容,但是我对此感到茫然。如何修改上面的代码,使其在此代理服务器上正常工作?