首页 > 解决方案 > Http通过socks5获取请求 | EOF 错误

问题描述

我正在尝试做的事情:
构建一个包(稍后使用),它提供了一种通过给定的 socks5 代理对任何页面执行 get-request 的方法。

我的问题:
当我尝试使用 SSL (https) 请求页面时,我收到以下错误:

执行请求时出错 Get https://www.xxxxxxx.com : socks connect tcp 83.234.8.214:4145->www.xxxxxxx.com:443: EOF

但是请求http://www.google.com工作正常。所以SSL连接肯定有问题。无法想象为什么这不起作用,因为我对 SSL 连接不是很有经验。End of file对我来说没有意义。

我当前的代码:

func main() {
    // public socks5 - worked when I created this question
    proxy_addr := "83.234.8.214:4145"

    // With this address I get the error
    web_addr := "https://www.whatismyip.com"

    // Requesting google works fine
    //web_addr := "http://www.google.com"

    dialer, err := proxy.SOCKS5("tcp", proxy_addr, nil, proxy.Direct)
    handleError(err, "error creating dialer")

    httpTransport := &http.Transport{}
    httpClient := &http.Client{Transport: httpTransport}

    httpTransport.DialTLS = dialer.Dial

    req, err := http.NewRequest("GET", web_addr, nil)
    handleError(err, "error creating request")

    httpClient.Timeout = 5 * time.Second

    resp, err := httpClient.Do(req)
    handleError(err, "error executing request")

    defer resp.Body.Close()
    b, err := ioutil.ReadAll(resp.Body)
    handleError(err, "error reading body")

    fmt.Println(string(b))
}

func handleError(err error, msg string) {
    if err != nil {
        log.Fatal(err)
    }
}

那么我在这里缺少什么来处理 ssl 连接?

非常感谢你。


编辑1:

万一有人认为这是whatismyip.com我做了更多测试的问题:

标签: sslgoproxyhttprequestsocks

解决方案


您的程序和 socks5 代理之间的连接不通过 SSL/TLS

所以你应该把线
httpTransport.DialTLS = dialer.Dial
改为
httpTransport.Dial = dialer.Dial

我检查了https://www.whatismyip.comhttps://www.google.com。网址下载得很好。
为了测试,我在我的服务器上设置了 3proxy 服务,用固定线路测试您的代码并检查 3proxy 日志。

所有发出的请求都在代理服务器日志中。

如果您需要更多帮助 - 请告诉我,我会提供帮助


注意事项

  • Socks5 代理需要支持 SSL 连接。
  • 问题中的代码不适用于此答案,因为代理(在代码中使用)不支持 SSL 连接。

推荐阅读