Golang本机http客户端挂起特定的URI

时间:2017-10-19 18:26:21

标签: go https

这是一个小小的代码和平:

//resp, err := http.Get("https://alfabank.ru")
resp, err := http.Get("https://google.com")
if err != nil {
    log.Fatalln(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatalln(err)
}
fmt.Println(string(body))

它适用于谷歌,但挂在alfabank(试图取消注释第一行和评论第二)。 我无法弄清楚这个问题的哪一方:( 但是,例如,

curl https://alfabank.ru

工作正常。

所以,我认为,Golang客户端存在问题。

我尝试使用tcpdump并查看我的计算机和远程服务器之间的无限流量。

你能帮我解决一下这个问题吗?

更新:遵循评论的建议

好的,curl发送此标题:

> GET / HTTP/1.1
> Host: alfabank.ru
> User-Agent: curl/7.54.0
> Accept: */*

所以,我试过

req, err := http.NewRequest(http.MethodGet, "http://alfabank.ru", nil)
if err != nil {
    log.Fatalln(err)
}
req.Header.Add("Accept", "*/*")
req.Header.Add("User-Agent", "curl/7.54.0")

client := http.Client{}
resp, err := client.Do(req)

它没有解决问题。

1 个答案:

答案 0 :(得分:1)

<强>解

感谢JimB,http2协议中的问题。

因此,禁用http2有助于我解决问题:

http.DefaultClient.Transport = &http.Transport{
    TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
}