diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2016-04-12 20:03:21 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2016-04-12 20:03:21 +0800 |
commit | 8627680e24a29abd5f2aaaeaa2c1c852d8fb693b (patch) | |
tree | 1ad39e8b43d04e5a17c17c0b7314eece80620dd5 /rpc/http.go | |
parent | 934f587bd5c38a36e8b8c8647a9e600d1751ff2f (diff) | |
parent | aa9fff3e68b1def0a9a22009c233150bf9ba481f (diff) | |
download | go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar.gz go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar.bz2 go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar.lz go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar.xz go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.tar.zst go-tangerine-8627680e24a29abd5f2aaaeaa2c1c852d8fb693b.zip |
Merge pull request #2359 from bas-vk/rpc-optional-args
rpc: several fixes and support for optional arguments
Diffstat (limited to 'rpc/http.go')
-rw-r--r-- | rpc/http.go | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/rpc/http.go b/rpc/http.go index dd1ec2c01..9283ce0ec 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -20,13 +20,12 @@ import ( "bytes" "encoding/json" "fmt" + "io" "io/ioutil" "net/http" "net/url" "strings" - "io" - "github.com/rs/cors" ) @@ -36,8 +35,9 @@ const ( // httpClient connects to a geth RPC server over HTTP. type httpClient struct { - endpoint *url.URL // HTTP-RPC server endpoint - lastRes []byte // HTTP requests are synchronous, store last response + endpoint *url.URL // HTTP-RPC server endpoint + httpClient http.Client // reuse connection + lastRes []byte // HTTP requests are synchronous, store last response } // NewHTTPClient create a new RPC clients that connection to a geth RPC server @@ -57,30 +57,22 @@ func (client *httpClient) Send(msg interface{}) error { var err error client.lastRes = nil - if body, err = json.Marshal(msg); err != nil { return err } - httpReq, err := http.NewRequest("POST", client.endpoint.String(), bytes.NewBuffer(body)) + resp, err := client.httpClient.Post(client.endpoint.String(), "application/json", bytes.NewReader(body)) if err != nil { return err } - httpReq.Header.Set("Content-Type", "application/json") - httpClient := http.Client{} - resp, err := httpClient.Do(httpReq) - if err != nil { - return err - } defer resp.Body.Close() - if resp.StatusCode == http.StatusOK { client.lastRes, err = ioutil.ReadAll(resp.Body) return err } - return fmt.Errorf("unable to handle request") + return fmt.Errorf("request failed: %s", resp.Status) } // Recv will try to deserialize the last received response into the given msg. |