2016-12-19 8 views
3

Trasportを作成してtcp接続を再利用するようにキープアライブセッションを制御しようとしています。golang net/httpでトランスポートを使用してヘッダー情報を追加する方法

ここに私のスニペットがあり、認証のためのヘッダー情報を追加する方法がわかりません。

url := "http://localhost:8181/api/v1/resource" 
tr := &http.Transport{ 
    DisableKeepAlives: false, 
    MaxIdleConns:  0, 
    MaxIdleConnsPerHost: 0, 
    IdleConnTimeout:  time.Second * 10, 
} 
client := &http.Client{Transport: tr} 
resp, err := client.Get(url) 
+0

あなたはそうではありません。ヘッダーは '* http.Request'から取得されます。 DisableKeepAlivesのデフォルトはfalseです。これは、接続が可能な限り再利用されることを意味します。 – JimB

+0

デフォルトでは、 'DisableKeepAlives'がfalseであるため、トランスポートを作成する必要はありません。 –

+0

また、 'DefaultTransport'をオーバーライドする場合は、すべての重要な設定をコピーしておく必要があります。つまり、ほとんどの場合、常にタイムアウトのあるDialContextが必要です。 (最初の3つのフィールドはゼロの値なので、何もしません) – JimB

答えて

2

リクエストからClientを混在させないでください。あなたが(h Header) Set(key, value string)http.Requestにヘッダーを設定client.Do(req)

req.Header.Set("name", "value") 
+0

私はお試しください。では、トランスポート構造体をカスタマイズしたい場合はどうすればよいですか。 –

+0

@Jamesあなたがすでにやっていること。リクエストに応じてヘッダーが設定されます。 – VonC

+0

ここでは、複数のgoroutineを使用しようとしています。だから、一度だけ作成して再利用することを考えました。 –

0

これは私が見つけたものです:

package main 

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

    var URL = "http://httpbin.org/ip" 

    func main() { 
     tr := &http.Transport{DisableKeepAlives: false} 
     req, _ := http.NewRequest("GET", URL, nil) 
     req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", "Token")) 
     req.Close = false 

     res, err := tr.RoundTrip(req) 
     if err != nil { 
      fmt.Println(err) 
     } 
     body, _ := ioutil.ReadAll(res.Body) 
     fmt.Println(string(body)) 
    } 

そして、それは動作します
クライアントがTransportを使用して、要求を実行します。

+2

それは私の答えで私が推奨したものと一致しているようです。 +1 – VonC

関連する問題