通过代理请求时的“ EOF”

时间:2018-11-30 04:43:47

标签: go proxy network-programming http-proxy

我正在使用ssh创建与EC2实例的代理连接:

:verbose

并且我编写了一个非常简单的Go程序,该程序可以发出http请求:

ssh -v -D 8123 ubuntu@some.ip.address

当我正常运行程序时,它会按预期运行。但是,当我使用HTTP_PROXY env var(godocexample)指定http代理(或者如果我创建使用该代理进行传输的自定义http客户端)时,会得到以下信息: / p>

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)))

}

和建立代理的SSH会话调试为我提供

HTTP_PROXY=localhost:8123 ./main 2018/11/29 23:33:27 Get http://example.com: EOF

当我将Macbook的wifi适配器配置为使用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 作为SOCKS代理时,它似乎可以工作。我面向公众的IP地址发生了变化,流量似乎在流动(实际上,我现在正在使用它)。知道为什么我的Go程序有问题吗?

1 个答案:

答案 0 :(得分:1)

col创建一个SOCKS代理。在测试中,您设置了HTTP代理。 SOCKS代理和HTTP代理使用不同的协议,这意味着您的客户端发出的请求不符合代理的期望,因此失败。

有关在Go上使用SOCKS代理的信息,请参见Creating a go socks5 client