add http client for streaming upload

a bit lowver perofrmance.
This commit is contained in:
Chris Lu
2020-02-10 13:43:41 -08:00
parent 58f126fd27
commit 0e1434d1c7
4 changed files with 107 additions and 73 deletions
+25 -6
View File
@@ -1,6 +1,7 @@
package util
import (
"bufio"
"bytes"
"compress/gzip"
"encoding/json"
@@ -31,6 +32,25 @@ func init() {
}
}
func PostContent(url string, fnWriteBody func(w *bufio.Writer), fnReqHeader func(*fasthttp.RequestHeader), fnResp func(resp *fasthttp.Response) error) error {
req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseRequest(req)
defer fasthttp.ReleaseResponse(resp)
req.SetRequestURI(url)
req.Header.SetMethod(fasthttp.MethodPost)
fnReqHeader(&req.Header)
req.SetBodyStreamWriter(fnWriteBody)
if err := fasthttp.Do(req, resp); err != nil {
return err
}
if resp.StatusCode() >= 400 {
return fmt.Errorf("%s: %d", url, resp.StatusCode())
}
return fnResp(resp)
}
func PostBytes(url string, body []byte) ([]byte, error) {
r, err := client.Post(url, "", bytes.NewReader(body))
if err != nil {
@@ -85,22 +105,21 @@ func Get(url string) ([]byte, error) {
return b, nil
}
func Head(url string, fn func(header fasthttp.ResponseHeader)) error {
func Head(url string, fn func(*fasthttp.ResponseHeader)) error {
req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseRequest(req) // <- do not forget to release
defer fasthttp.ReleaseResponse(resp) // <- do not forget to release
defer fasthttp.ReleaseRequest(req)
defer fasthttp.ReleaseResponse(resp)
c := fasthttp.Client{}
req.SetRequestURI(url)
req.Header.SetMethod(fasthttp.MethodHead)
if err := c.Do(req, resp); err != nil {
if err := fasthttp.Do(req, resp); err != nil {
return err
}
if resp.StatusCode() >= 400 {
return fmt.Errorf("%s: %d", url, resp.StatusCode())
}
fn(resp.Header)
fn(&resp.Header)
return nil
}
+1 -1
View File
@@ -7,7 +7,7 @@ import (
)
func TestFasthttpClientHead(t *testing.T) {
err := Head("https://www.google.com", func(header fasthttp.ResponseHeader) {
err := Head("https://www.google.com", func(header *fasthttp.ResponseHeader) {
header.VisitAll(func(key, value []byte) {
println(string(key) + ": " + string(value))
})