diff options
author | Bas van Kervel <bas@ethdev.com> | 2016-03-14 16:38:54 +0800 |
---|---|---|
committer | Bas van Kervel <bas@ethdev.com> | 2016-04-12 17:02:39 +0800 |
commit | aa9fff3e68b1def0a9a22009c233150bf9ba481f (patch) | |
tree | 926c241574d6d80dfe4ffd6d2e447a9f7f84dc8b /rpc/http.go | |
parent | 7e02105672cda92889a78db864a5701d78f45eb2 (diff) | |
download | dexon-aa9fff3e68b1def0a9a22009c233150bf9ba481f.tar.gz dexon-aa9fff3e68b1def0a9a22009c233150bf9ba481f.tar.zst dexon-aa9fff3e68b1def0a9a22009c233150bf9ba481f.zip |
rpc: various fixes/enhancements
rpc: be less restrictive on the request id
rpc: improved documentation
console: upgrade web3.js to version 0.16.0
rpc: cache http connections
rpc: rename wsDomains parameter to wsOrigins
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. |