func (h *httpGetter) Get(context Context, in *pb.GetRequest, out *pb.GetResponse) error { u := fmt.Sprintf( "%v%v/%v", h.baseURL, url.QueryEscape(in.GetGroup()), url.QueryEscape(in.GetKey()), ) req, err := http.NewRequest("GET", u, nil) if err != nil { return err } tr := http.DefaultTransport if h.transport != nil { tr = h.transport(context) } res, err := tr.RoundTrip(req) if err != nil { return err } defer res.Body.Close() if res.StatusCode != http.StatusOK { return fmt.Errorf("server returned: %v", res.Status) } // TODO: avoid this garbage. b, err := ioutil.ReadAll(res.Body) if err != nil { return fmt.Errorf("reading response body: %v", err) } err = proto.Unmarshal(b, out) if err != nil { return fmt.Errorf("decoding response body: %v", err) } return nil }
func (p *fakePeer) Get(_ Context, in *pb.GetRequest, out *pb.GetResponse) error { p.hits++ if p.fail { return errors.New("simulated error from peer") } out.Value = []byte("got:" + in.GetKey()) return nil }
func (h *httpGetter) Get(context Context, in *pb.GetRequest, out *pb.GetResponse) error { u, err := url.Parse(h.baseURL) if err != nil { return err } query := u.Query() query.Set("group", in.GetGroup()) query.Set("key", in.GetKey()) u.RawQuery = query.Encode() req, err := http.NewRequest("GET", u.String(), nil) if err != nil { return err } tr := http.DefaultTransport if h.transport != nil { tr = h.transport(context) } client := &http.Client{ Transport: tr, } res, err := client.Do(req) if err != nil { return err } defer res.Body.Close() if res.StatusCode != http.StatusOK { return fmt.Errorf("server returned: %v", res.Status) } b := bufferPool.Get().(*bytes.Buffer) b.Reset() defer bufferPool.Put(b) _, err = io.Copy(b, res.Body) if err != nil { return fmt.Errorf("reading response body: %v", err) } err = proto.Unmarshal(b.Bytes(), out) if err != nil { return fmt.Errorf("decoding response body: %v", err) } return nil }
func (h *httpGetter) Get(context Context, in *pb.GetRequest, out *pb.GetResponse) (err error) { uu, err := url.Parse(h.baseURL) if err != nil { return err } q := url.Values{} q.Set("group", in.GetGroup()) q.Set("key", in.GetKey()) uu.RawQuery = q.Encode() req, err := http.NewRequest("GET", uu.String(), nil) if err != nil { return err } req.Close = true tr := http.DefaultTransport if h.transport != nil { tr = h.transport(context) } res, err := tr.RoundTrip(req) if err != nil { return err } defer res.Body.Close() if res.StatusCode != http.StatusOK { return fmt.Errorf("server returned: %v", res.Status) } // TODO: avoid this garbage. b, err := ioutil.ReadAll(res.Body) if err != nil { return fmt.Errorf("reading response body: %v", err) } err = proto.Unmarshal(b, out) if err != nil { return fmt.Errorf("decoding response body: %v", err) } return nil }
func (h *httpGetter) Get(context Context, in *pb.GetRequest, out *pb.GetResponse) error { u := fmt.Sprintf( "%v%v/%v", h.baseURL, url.QueryEscape(in.GetGroup()), url.QueryEscape(in.GetKey()), ) req, err := http.NewRequest("GET", u, nil) if err != nil { return err } tr := http.DefaultTransport if h.transport != nil { tr = h.transport(context) } res, err := tr.RoundTrip(req) if err != nil { return err } defer res.Body.Close() if res.StatusCode != http.StatusOK { return fmt.Errorf("server returned: %v", res.Status) } b := bufferPool.Get().(*bytes.Buffer) b.Reset() defer bufferPool.Put(b) _, err = io.Copy(b, res.Body) if err != nil { return fmt.Errorf("reading response body: %v", err) } err = proto.Unmarshal(b.Bytes(), out) if err != nil { return fmt.Errorf("decoding response body: %v", err) } return nil }