"EOF" 通过代理发出请求时
"EOF" when making request through proxy
我正在使用 ssh 创建到 EC2 实例的代理连接:
ssh -v -D 8123 ubuntu@some.ip.address
并且我编写了一个非常简单的 Go 程序来发出 http 请求:
package main
import (
"io/ioutil"
"net/http"
"os"
"log"
"fmt"
)
func main(){
resp, err := http.Get("http://example.com")
if err != nil {
log.Println(err)
os.Exit(1)
}
fmt.Println(string(ioutil.ReadAll(resp.Body)))
}
当我 运行 我的程序正常时,它按预期工作。但是,当我使用 HTTP_PROXY env var (godoc, example) 指定一个 http 代理时(或者如果我制作一个使用该代理进行传输的自定义 http 客户端),我得到以下信息:
HTTP_PROXY=localhost:8123 ./main 2018/11/29 23:33:27 Get http://example.com: EOF
我建立代理的 SSH 会话的调试给了我:
debug1: Connection to port 8123 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
debug1: channel 3: free: dynamic-tcpip, nchannels 4
当我将我的 macbook 的 wifi 适配器配置为使用 localhost:8123
作为 SOCKS 代理时,它似乎可以工作。我的 public-facing IP 地址发生变化,流量似乎在流动(事实上,我现在正在使用它)。知道为什么我的 Go 程序有问题吗?
socks -D
创建一个 SOCKS 代理。在您的测试中,您设置了一个 HTTP 代理。 SOCKS 代理和 HTTP 代理使用不同的协议,这意味着您的客户端发出的请求不符合代理的预期,因此失败。
要在 Go 中使用 SOCKS 代理,请参阅 。
我正在使用 ssh 创建到 EC2 实例的代理连接:
ssh -v -D 8123 ubuntu@some.ip.address
并且我编写了一个非常简单的 Go 程序来发出 http 请求:
package main
import (
"io/ioutil"
"net/http"
"os"
"log"
"fmt"
)
func main(){
resp, err := http.Get("http://example.com")
if err != nil {
log.Println(err)
os.Exit(1)
}
fmt.Println(string(ioutil.ReadAll(resp.Body)))
}
当我 运行 我的程序正常时,它按预期工作。但是,当我使用 HTTP_PROXY env var (godoc, example) 指定一个 http 代理时(或者如果我制作一个使用该代理进行传输的自定义 http 客户端),我得到以下信息:
HTTP_PROXY=localhost:8123 ./main 2018/11/29 23:33:27 Get http://example.com: EOF
我建立代理的 SSH 会话的调试给了我:
debug1: Connection to port 8123 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
debug1: channel 3: free: dynamic-tcpip, nchannels 4
当我将我的 macbook 的 wifi 适配器配置为使用 localhost:8123
作为 SOCKS 代理时,它似乎可以工作。我的 public-facing IP 地址发生变化,流量似乎在流动(事实上,我现在正在使用它)。知道为什么我的 Go 程序有问题吗?
socks -D
创建一个 SOCKS 代理。在您的测试中,您设置了一个 HTTP 代理。 SOCKS 代理和 HTTP 代理使用不同的协议,这意味着您的客户端发出的请求不符合代理的预期,因此失败。
要在 Go 中使用 SOCKS 代理,请参阅