// Watch attempts to begin watching the requested location. // Returns a watch.Interface, or an error. func (r *Request) Watch() (watch.Interface, error) { if r.err != nil { return nil, r.err } req, err := http.NewRequest(r.verb, r.finalURL(), r.body) if err != nil { return nil, err } client := r.client if client == nil { client = http.DefaultClient } resp, err := client.Do(req) if err != nil { if isProbableEOF(err) { return watch.NewEmptyWatch(), nil } return nil, err } if resp.StatusCode != http.StatusOK { var body []byte if resp.Body != nil { body, _ = ioutil.ReadAll(resp.Body) } return nil, fmt.Errorf("for request '%+v', got status: %v\nbody: %v", req.URL, resp.StatusCode, string(body)) } return watch.NewStreamWatcher(watchjson.NewDecoder(resp.Body, r.codec)), nil }
// Watch attempts to begin watching the requested location. // Returns a watch.Interface, or an error. func (r *Request) Watch() (watch.Interface, error) { if r.err != nil { return nil, r.err } url := r.URL().String() req, err := http.NewRequest(r.verb, url, r.body) if err != nil { return nil, err } client := r.client if client == nil { client = http.DefaultClient } resp, err := client.Do(req) if err != nil { // The watch stream mechanism handles many common partial data errors, so closed // connections can be retried in many cases. if util.IsProbableEOF(err) { return watch.NewEmptyWatch(), nil } return nil, err } if resp.StatusCode != http.StatusOK { if result := r.transformResponse(resp, req); result.err != nil { return nil, result.err } return nil, fmt.Errorf("for request '%+v', got status: %v", url, resp.StatusCode) } return watch.NewStreamWatcher(watchjson.NewDecoder(resp.Body, r.codec)), nil }