code: func (r *Request) Body(obj interface{}) *Request {
  	if r.err != nil {
  		return r
  	}
  	switch t := obj.(type) {
  	case string:
  		data, err := ioutil.ReadFile(t)
  		if err != nil {
  			r.err = err
  			return r
  		}
  		glog.V(8).Infof("Request Body: %s", string(data))
  		r.body = bytes.NewBuffer(data)
  	case []byte:
  		glog.V(8).Infof("Request Body: %s", string(t))
  		r.body = bytes.NewBuffer(t)
  	case io.Reader:
  		r.body = t
  	case runtime.Object:
  		// callers may pass typed interface pointers, therefore we must check nil with reflection
  		if reflect.ValueOf(t).IsNil() {
  			return r
  		}
  		data, err := runtime.Encode(r.content.Codec, t)
  		if err != nil {
  			r.err = err
  			return r
  		}
  		glog.V(8).Infof("Request Body: %s", string(data))
  		r.body = bytes.NewBuffer(data)
  		r.SetHeader("Content-Type", r.content.ContentType)
  	default:
  		r.err = fmt.Errorf("unknown type used for body: %+v", obj)
  	}
  	return r
  }
docs: // Body makes the request use obj as the body. Optional.
  // If obj is a string, try to read a file of that name.
  // If obj is a []byte, send it directly.
  // If obj is an io.Reader, use it directly.
  // If obj is a runtime.Object, marshal it correctly, and set Content-Type header.
  // If obj is a runtime.Object and nil, do nothing.
  // Otherwise, set an error.