in http.go [350:401]
func (h *httpPeer) Put(context Context, in *pb.PutRequest, out *pb.PutResponse) error {
u := fmt.Sprintf(
"%v%v/%v",
h.baseURL,
url.QueryEscape(in.GetGroup()),
url.QueryEscape(in.GetKey()),
)
var ttl time.Time
hasTTL := false
var err error
if in.GetTtl() != nil {
ttl, err = ptypes.Timestamp(in.GetTtl())
if err != nil {
return err
}
hasTTL = true
}
p := putBody{Value: in.GetValue(), HasTTL: hasTTL, TTL: ttl}
jb, err := json.Marshal(p)
if err != nil {
return err
}
reader := bytes.NewReader(jb)
req, err := http.NewRequest("POST", u, reader)
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
}