Si quelqu'un cherche encore des réponses sur la façon de procéder, voici comment je m'y prends.
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))
}
Go Playground : https://play.golang.org/p/cYWdFu0r62e
En résumé, je crée une méthode différente pour créer un client HTTP et l'assigner à une variable, puis l'utiliser pour effectuer des requêtes. Notez que le
defer response.Body.Close()
Cela fermera la connexion une fois la requête terminée à la fin de l'exécution de la fonction et vous pourrez réutiliser le client autant de fois que vous le souhaitez.
Si vous voulez envoyer une demande dans une boucle, appelez la fonction qui envoie la demande dans une boucle.
Si vous voulez changer quoi que ce soit dans la configuration de transport du client, comme ajouter une configuration de proxy, faites un changement dans la configuration du client.
J'espère que cela aidera quelqu'un.