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) 

它并不能解决问题。

+2

设置相应的头文件。 – Volker

+1

该服务器似乎有一个破损的http2实施。 – JimB

+0

您可能应该发布解决方案作为答案。有一个选择自我回答,并通过SO规则。 –

SOLUTION

谢谢JimB,问题http2协议。

因此,禁用http2帮我解决这个问题:

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