2012-11-07 13 views
32

Próbuję zrobić, aby moja aplikacja Go określała się jako konkretna UserAgent, ale nie może znaleźć niczego, jak to zrobić z net/http. Tworzę plik http.Client i używam go do wysyłania żądań Get przez client.Get().Ustawienie UserAgent w żądaniu http

Czy istnieje sposób ustawienia UserAgent w kliencie lub w ogóle?

Odpowiedz

63

Tworząc korzystania żądania request.Header.Set("key", "value"):

package main 

import (
     "io/ioutil" 
     "log" 
     "net/http" 
) 

func main() { 
     client := &http.Client{} 

     req, err := http.NewRequest("GET", "http://httpbin.org/user-agent", nil) 
     if err != nil { 
       log.Fatalln(err) 
     } 

     req.Header.Set("User-Agent", "Golang_Spider_Bot/3.0") 

     resp, err := client.Do(req) 
     if err != nil { 
       log.Fatalln(err) 
     } 

     defer resp.Body.Close() 
     body, err := ioutil.ReadAll(resp.Body) 
     if err != nil { 
       log.Fatalln(err) 
     } 

     log.Println(string(body)) 

} 

Wynik:

2012/11/07 15:05:47 { 
    "user-agent": "Golang_Spider_Bot/3.0" 
} 

PS: http://httpbin.org jest niesamowity do testowania tego typu rzeczy!

+3

dzięki za wskazanie httpbin.org - nie wiedziałem o tym. – kostix

+2

Występuje problem z używaniem nagłówków po przekierowaniu - nie będą one używane domyślnie. Należy podać niestandardową funkcję w polu Client.CheckRedirect. –

+1

Chcę tylko podkreślić, że chociaż "Golang Spider Bot v. 3.0" jest poprawna pod względem składni, prawdopodobnie nie oznacza to, czego chcesz. Zgodnie ze specyfikacją oznacza to 5 tokenów produktu: "Golang", "Spider", "Bot", "v." I "3.0". Coś dokładniejszego byłoby "Golang_Spider_Bot/3.0" zobacz: http://www.bizcoder.com/the-uly-maligned-user-agent-header –

Powiązane problemy