2012-11-07 3 views
32

Go 응용 프로그램을 특정 UserAgent으로 지정하려고 시도하지만 net/http과 함께이 작업을 수행하는 방법을 찾을 수 없습니다. http.Client을 만들고 Get 요청을 만들 때 사용합니다 (client.Get() 통해).http 요청에 UserAgent 설정

클라이언트에 UserAgent을 설정하는 방법이 있습니까?

답변

63

요청을 사용 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)) 

} 

결과 :

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

P.S.을 http://httpbin.org은 이런 종류의 테스트에 놀랍습니다!

+3

httpbin.org를 지적 해 주셔서 감사합니다. – kostix

+2

리디렉션 후에 헤더를 사용하는 데 문제가 있습니다. 기본적으로 사용되지 않습니다. Client.CheckRedirect 필드에 사용자 지정 함수를 제공해야합니다. –

+1

단지 "Golang Spider Bot v. 3.0"이 구문 상 정확한 반면, 아마도 당신이 원하는 것을 의미하지는 않는다는 것을 지적하고 싶습니다. 사양에 따르면 "Golang", "Spider", "Bot", "v."및 "3.0"의 5 가지 제품 토큰이 있음을 의미합니다. 더 정확한 것은 "Golang_Spider_Bot/3.0"입니다. 참조 : http://www.bizcoder.com/the-much-maligned-user-agent-header –

관련 문제