code: func (c *FCGIClient) Request(p map[string]string, req io.Reader) (resp *http.Response, err error) {
  	r, err := c.Do(p, req)
  	if err != nil {
  		return
  	}
  
  	rb := bufio.NewReader(r)
  	tp := textproto.NewReader(rb)
  	resp = new(http.Response)
  
  	if c.readTimeout != 0 {
  		if err = c.conn.SetReadDeadline(time.Now().Add(c.readTimeout)); err != nil {
  			return
  		}
  	}
  
  	// Parse the response headers.
  	mimeHeader, err := tp.ReadMIMEHeader()
  	if err != nil && err != io.EOF {
  		return
  	}
  	resp.Header = http.Header(mimeHeader)
  
  	if resp.Header.Get("Status") != "" {
  		statusParts := strings.SplitN(resp.Header.Get("Status"), " ", 2)
  		resp.StatusCode, err = strconv.Atoi(statusParts[0])
  		if err != nil {
  			return
  		}
  		if len(statusParts) > 1 {
  			resp.Status = statusParts[1]
  		}
  
  	} else {
  		resp.StatusCode = http.StatusOK
  	}
  
  	// TODO: fixTransferEncoding ?
  	resp.TransferEncoding = resp.Header["Transfer-Encoding"]
  	resp.ContentLength, _ = strconv.ParseInt(resp.Header.Get("Content-Length"), 10, 64)
  
  	if chunked(resp.TransferEncoding) {
  		resp.Body = clientCloser{c, httputil.NewChunkedReader(rb)}
  	} else {
  		resp.Body = clientCloser{c, ioutil.NopCloser(rb)}
  	}
  	return
  }
docs: // Request returns a HTTP Response with Header and Body
  // from fcgi responder