登录
首页 >  Golang >  Go问答

代理请求时遇到的“EOF”问题

来源:stackoverflow

时间:2024-03-10 12:18:27 401浏览 收藏

一分耕耘,一分收获!既然都打开这篇《代理请求时遇到的“EOF”问题》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

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

ssh -v -d 8123 [email protected]

我编写了一个非常简单的 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 环境变量(godoc,示例)指定 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 代理时,它似乎可以工作。我面向公众的 ip 地址发生了变化,并且流量似乎在流动(事实上,我现在正在使用它)。知道为什么我的 go 程序有问题吗?


解决方案


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

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

今天关于《代理请求时遇到的“EOF”问题》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>