Golang本地HTTP客户端上的特定URI
问题描述:
挂这是一个很小的代码和平:Golang本地HTTP客户端上的特定URI
//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和看我的机器和远程服务器之间的无限流量。
能不能帮我找出这个问题?
UPDATE:以下评论来自
好的建议,卷曲发送这个头:
> 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)
它并不能解决问题。
答
SOLUTION:
谢谢JimB,问题http2协议。
因此,禁用http2帮我解决这个问题:
http.DefaultClient.Transport = &http.Transport{
TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
}
设置相应的头文件。 – Volker
该服务器似乎有一个破损的http2实施。 – JimB
您可能应该发布解决方案作为答案。有一个选择自我回答,并通过SO规则。 –