diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-02-10 13:43:41 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-02-10 13:43:41 -0800 |
| commit | 0e1434d1c75b4e8e2536c64d169e89f392405653 (patch) | |
| tree | 8fdc408ac2c8eb66ac9419af58945c49a42e24ce /weed/util/http_util.go | |
| parent | 58f126fd27bb2f366f76f42223b93ba3b31a0bd8 (diff) | |
| download | seaweedfs-origin/add_fasthttp_client.tar.xz seaweedfs-origin/add_fasthttp_client.zip | |
add http client for streaming uploadorigin/add_fasthttp_client
a bit lowver perofrmance.
Diffstat (limited to 'weed/util/http_util.go')
| -rw-r--r-- | weed/util/http_util.go | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/weed/util/http_util.go b/weed/util/http_util.go index b74e30ad7..a1f58d482 100644 --- a/weed/util/http_util.go +++ b/weed/util/http_util.go @@ -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 } |
