【问题标题】:Http get request through socks5 | EOF errorHttp通过socks5获取请求 | EOF 错误
【发布时间】:2018-09-20 15:55:49
【问题描述】:

我要做什么:
构建一个包(稍后使用),它提供了一种通过给定的 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 的问题,我已经做了更多测试:

【问题讨论】:

  • 它适用于 google,因为您为 google 设置的 URL 使用的是 http 而不是 https。我已经用你的代码尝试了https://www.google.com,它也不起作用......
  • @math2001 这也是我在我的问题中所说的。而这里的核心问题是为什么如何处理https
  • 这意味着 SOCKS 服务器断开连接,没有给你发送任何东西。检查其日志以找出原因。
  • @MichaelHampton whatismyip.com 不是我的网站,所以我无法查看他们的日志。此外,该网站不是唯一一个引发错误的网站。事实上,在任何使用 SSL 的地方都会发生这种情况。
  • 我说的是检查 SOCKS 服务器的日志,而不是你试图通过它访问的目标网站。

标签: ssl go proxy httprequest socks


【解决方案1】:

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

所以你应该换行
httpTransport.DialTLS = dialer.Dial

httpTransport.Dial = dialer.Dial

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

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

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


注意事项

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

【讨论】:

  • 我已经编辑并添加了我自己对此的研究。不幸的是,您要么没有使用您的解决方案测试我自己的代码,要么您没有设置任何评论为什么我对您的解决方案的评论仍然不起作用。我的编辑应该清除它。我选择了另一个代理 79.106.133.123:1080 并且请求突然按预期工作。
  • 还要考虑到 httpTransport.Dial 已被废弃。我不知道从那以后应该如何处理,所以我把这个留给你谈谈(如果你知道的话)。远离这 2 cmets 我的问题是固定的。非常感谢!
  • 我使用 3proxy 进行测试,如果您需要我会发送完整代码 + /etc/3proxy.cfg
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多