|
package main |
|
|
|
import ( |
|
"crypto/tls" |
|
"fmt" |
|
"io" |
|
"io/ioutil" |
|
"net/http" |
|
"os" |
|
"sync" |
|
"time" |
|
) |
|
|
|
func main() { |
|
|
|
f, err := os.Open("tmp/fakename") |
|
if err != nil { |
|
panic(err) |
|
} |
|
UploadFile("https://fakeurlhere", "randomstring", f) |
|
} |
|
|
|
func UploadFile(url, key string, b io.Reader) { |
|
|
|
req, err := http.NewRequest("POST", url, b) |
|
if err != nil { |
|
return |
|
} |
|
// Don't forget to set the content type, this will contain the boundary. |
|
req.Header.Set("Content-Type", "bob") |
|
|
|
transp, _ := createTransport() |
|
jobCreateTime := time.Now() |
|
resp, err := transp.Do(req) |
|
timeDifference := time.Now().Sub(jobCreateTime) |
|
fmt.Println("time difference is ", timeDifference) |
|
if resp != nil { |
|
defer resp.Body.Close() |
|
responseBody, err := ioutil.ReadAll(resp.Body) |
|
if err != nil { |
|
fmt.Printf("Response is %s %s\n", responseBody, err) |
|
} |
|
} |
|
|
|
} |
|
|
|
var m sync.Mutex |
|
var DefaultClient *http.Client |
|
|
|
func createTransport() (*http.Client, error) { |
|
m.Lock() |
|
defer m.Unlock() |
|
if DefaultClient != nil { |
|
return DefaultClient, nil |
|
} |
|
|
|
DefaultClient = http.DefaultClient |
|
defaultRoundTripper := http.DefaultTransport |
|
defaultTransport := defaultRoundTripper.(*http.Transport).Clone() |
|
//if !ok { |
|
// panic(fmt.Sprintf("defaultRoundTripper not an *http.Transport")) |
|
//} |
|
defaultTransport.TLSClientConfig = &tls.Config{ |
|
InsecureSkipVerify: true, |
|
} |
|
defaultTransport.MaxIdleConns = 400 |
|
defaultTransport.MaxIdleConnsPerHost = 400 |
|
defaultTransport.IdleConnTimeout = 60 * time.Minute |
|
defaultTransport.ForceAttemptHTTP2 = false |
|
DefaultClient.Transport = defaultTransport |
|
|
|
return DefaultClient, nil |
|
} |