这是一小段代码:
//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))
它在 Google 上运行良好,但在 alfabank 上挂起(尝试取消注释第一行并注释第二行)。 我不知道这个问题出在哪一边:( 但是,例如,
curl https://alfabank.ru
工作正常。
所以,我认为问题出在 Golang 客户端。
我尝试使用 tcpdump 并看到我的计算机和远程服务器之间的无限流量。
你能帮我解决这个问题吗?
更新:遵循评论中的建议
好的,curl 发送此 header :
> 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)
这并不能解决问题。
最佳答案
解决方案:
感谢JimB ,http2协议(protocol)的问题。
因此,禁用 http2 可以帮助我解决问题:
http.DefaultClient.Transport = &http.Transport{
TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
}
关于Golang native http 客户端卡在特定 URI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836534/