2017-10-19 15 views
0

Ceci est une petite paix de code:native client http golang se bloque sur URI particulier

//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)) 

Il fonctionne très bien avec Google, mais se bloque sur Alfa Bank (essayez de première ligne Décommentez et commentaires seconde). Je ne peux pas comprendre de quel côté ce problème :( Mais, par exemple,

curl https://alfabank.ru 

fonctionne très bien.

Donc, je pense que le problème dans le client golang.

J'ai essayé d'utiliser tcpdump et voir le trafic infini entre ma machine et le serveur distant.

Pourriez-vous me aider à comprendre le problème?

MISE À JOUR: suivant les conseils des commentaires

Ok, curl envoie ces en-têtes:

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

Alors, j'ai essayé

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) 

Il ne résout pas le problème.

+2

Définissez les en-têtes appropriés. – Volker

+1

Ce serveur semble avoir une implémentation http2 cassée. – JimB

+0

Vous devriez probablement poster la solution comme réponse. Il y a une option pour répondre soi-même et c'est OK par les règles SO. –

Répondre

0

SOLUTION:

Merci à JimB, problème dans le protocole HTTP2.

Ainsi, la désactivation HTTP2 me aide à résoudre le problème:

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