2012-11-07 103 views
32

我想让我的Go应用程序指定自己为特定的UserAgent,但无法找到任何关于如何使用net/http执行此操作的任何信息。我正在创建一个http.Client,并使用它通过client.Get()发出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" 
} 

附: http://httpbin.org对于测试这种事情是惊人的!

+3

感谢您指出httpbin.org - 不知道它。 – kostix

+2

重定向后使用标题时出现问题 - 默认情况下不会使用它们。您应该在Client.CheckRedirect字段中提供自定义功能。 –

+1

只是想指出,虽然“Golang Spider Bot v。3.0”在语法上是正确的,但它可能并不意味着你想要的。根据规范,这意味着有5个产品令牌:“Golang”,“Spider”,“Bot”,“v。”和“3.0”。更准确的将是“Golang_Spider_Bot/3.0” 请参阅:http://www.bizcoder.com/the-much-maligned-user-agent-header –