I have an http client that creates multiple host connections. I want to set the maximum number of connections that it can establish for a specific host. There are no such options in the request. Transportation. My code looks like
package main import ( "fmt" "net/http" "net/url" ) const ( endpoint_url_fmt = "https://blah.com/api1?%s" ) func main() { transport := http.Transport{ DisableKeepAlives : false } outParams := url.Values{} outParams.Set("method", "write") outParams.Set("message", "BLAH") for { // Encode as part of URI. outboundRequest, err := http.NewRequest( "GET", fmt.Sprintf(endpoint_url_fmt, outParams.Encode()), nil ) outboundRequest.Close = false _ , err = transport.RoundTrip(outboundRequest) if err != nil { fmt.Println(err) } } }
I expect this to create 1 connection. As I call it in the loop. But this creates an infinite number of connections.
Where, as a similar Python code, using the query library, only one connection is created.
#!/usr/bin/env python import requests endpoint_url_fmt = "https://something.com/restserver.php" params = {} params['method'] = 'write' params['category'] = category_errors_scuba params['message'] = "blah" while True: r = requests.get(endpoint_url_fmt, params = params)
For some reason, go code does not reuse http connections.
EDIT: The go code needs the body to be closed to reuse the connection.
resp , err = transport.RoundTrip(outboundRequest) resp.Close()
source share