2012-11-07 51 views
32

Tôi đang cố gắng làm cho ứng dụng Go của tôi tự xác định là UserAgent cụ thể, nhưng không thể tìm thấy bất kỳ điều gì về cách thực hiện việc này với net/http. Tôi đang tạo một http.Client và sử dụng số này để thực hiện các yêu cầu Get, qua client.Get().Đặt UserAgent theo yêu cầu http

Có cách nào để đặt UserAgent trong ứng dụng khách hay không?

Trả lời

63

Khi tạo sử dụng yêu cầu của bạn 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)) 

} 

Kết quả:

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

T.B. http://httpbin.org thật tuyệt vời khi thử nghiệm loại điều này!

+3

cảm ơn vì đã chỉ ra httpbin.org - không biết về điều đó. – kostix

+2

Có vấn đề với việc sử dụng tiêu đề sau khi chuyển hướng - chúng sẽ không được sử dụng theo mặc định. Bạn nên cung cấp chức năng tùy chỉnh trong trường Client.CheckRedirect. –

+1

Chỉ muốn chỉ ra rằng trong khi "Golang Spider Bot v. 3.0" là cú pháp chính xác, nó có thể không có nghĩa là những gì bạn muốn. Theo spec, điều đó có nghĩa là có 5 mã sản phẩm: "Golang", "Spider", "Bot", "v." Và "3.0". Một cái gì đó chính xác hơn sẽ là "Golang_Spider_Bot/3.0" xem: http://www.bizcoder.com/the-much-maligned-user-agent-header –