Я пытаюсь сделать HTTPS-вызовы с Tcl с использованием модулей http и tls , и я хотел бы просмотреть сами вызовы с помощью mitmproxy .
Сначала я установил mitmproxy, установил его сертификаты и проверил, что он работает нормально, указав Firefox использовать прокси на localhost: 8080. Я могу просматривать все вызовы https в mitmproxy и видеть правильные ответы в браузере.
Сейчас я пытаюсь заставить следующий код правильно работать с 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 показывает мне похожую ошибку в пользовательском интерфейсе.
Я также пытался 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 для отправки чего-то в запросе, которым я должен быть, но я не знаю, что это такое. Как изменить приведенный выше код, чтобы он правильно работал с этим прокси-сервером?