誰かがそれを行う方法についてまだ答えを見つけている場合、これが私がやっている方法です.
package main
import (
"bytes"
"io/ioutil"
"log"
"net/http"
"time"
)
func httpClient() *http.Client {
client := &http.Client{
Transport: &http.Transport{
MaxIdleConnsPerHost: 20,
},
Timeout: 10 * time.Second,
}
return client
}
func sendRequest(client *http.Client, method string) []byte {
endpoint := "https://httpbin.org/post"
req, err := http.NewRequest(method, endpoint, bytes.NewBuffer([]byte("Post this data")))
if err != nil {
log.Fatalf("Error Occured. %+v", err)
}
response, err := client.Do(req)
if err != nil {
log.Fatalf("Error sending request to API endpoint. %+v", err)
}
// Close the connection to reuse it
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatalf("Couldn't parse response body. %+v", err)
}
return body
}
func main() {
c := httpClient()
response := sendRequest(c, http.MethodPost)
log.Println("Response Body:", string(response))
}
プレイグラウンドに行く: https://play.golang.org/p/cYWdFu0r62e
要約すると、別のメソッドを作成して HTTP クライアントを作成し、それを変数に割り当ててから、それを使用してリクエストを行います。注意してください
defer response.Body.Close()
これにより、関数の実行の最後にリクエストが完了した後に接続が閉じられ、クライアントを何度でも再利用できます。
ループでリクエストを送信する場合は、ループでリクエストを送信する関数を呼び出します。
プロキシ設定の追加など、クライアント トランスポート設定を変更する場合は、クライアント設定を変更します。
これが誰かを助けることを願っています。