我会尽我所能解释一切,服务器的新东西!一切都在 Go 中,主要问题在于 ServeHTTP。
问题
我正在处理 (http.server).ListenAndServe()
收到的转发请求通过 (http.ReverseProxy).ServeHTTP(http.ResponseWriter, *http.Request)
发送到另一个代理服务器.我正在使用 python 请求提交 GET 请求并通过第一台服务器和第二台服务器将其代理到实际目标。我已经可以提交和接收http请求,但是我无法提交https请求。
错误
我经常收到 502 bad gateway
来自 python 请求库,可能是 http: proxy error: unsupported protocol scheme ""
的结果当我使用 https://httpbin.org 时来自 ServeHTTP()或任何其他 https 站点。使用 http 结果返回给我的 html。
react 差异
*http.Response 的区别在于 http 是
&{GET http://httpbin.org HTTP/1.0 1 0 map[] <nil> <nil> 0 [] true http://httpbin.org map[] map[] <nil> map[] [my ip address] http://httpbin.org <nil> <nil> <nil> 0xc000050fc0}
而 https 是
&{CONNECT //httpbin.org:443 HTTP/1.0 1 0 map[] <nil> <nil> 0 [] true httpbin.org:443 map[] map[] <nil> map[] [my ip address] httpbin.org:443 <nil> <nil> <nil> 0xc0000503c0}
这是一个link到 *http.Request
的文档我之前尝试过的
我试过修改 ReverseProxy.Director 属性并让函数修改 *http.Request。我已经完成了从删除“:443”到添加“https://”甚至“http://”的所有操作。这样做会导致错误请求错误。我还尝试将 CONNECT 请求更改为 GET 或 POST,这两种请求都产生了奇怪的结果,包括无效方法或错误请求。
有什么帮助吗?
最佳答案
我认为问题在于您不能真正正常地代理 https 请求。我假设您正在尝试根据您的描述将服务器用作另一个代理的代理,所以看起来您将不得不在中间人来欺骗代理请求以将其发送到实际代理服务器。
请注意,这可能是个坏主意,请确保在这种情况下所有请求都是安全的,因为中间服务器可以读取未加密的 https 信息。
不幸的是,我没有想到快速的解决方案。相反,您必须深入研究这个 library并修改特定的 MITM 请求并设置 https.go 将每个请求分发到的其他代理服务器池。
祝你好运!
关于http - 如何使用 Go 代理 https 请求,http 请求工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68959729/