func drainBody(b io.ReadCloser) (r1, r2 io.ReadCloser, err error) {
	if b == nil || b == http.NoBody {
		// No copying needed. Preserve the magic sentinel meaning of NoBody.
		return http.NoBody, http.NoBody, nil
	}
	var buf bytes.Buffer
	if _, err = buf.ReadFrom(b); err != nil {
		return nil, b, err
	}
	if err = b.Close(); err != nil {
		return nil, b, err
	}
	return ioutil.NopCloser(&buf), ioutil.NopCloser(bytes.NewReader(buf.Bytes())), nil
}
// drainBody will duplicate a reader into two separate readers
drainBody will duplicate a reader into two separate readers
// drainBody will duplicate a reader into two separate readers
func drainBody(b io.ReadCloser) (r1, r2 io.ReadCloser, err error) {
	if b == nil || b == http.NoBody {
		return http.NoBody, http.NoBody, nil
	}
	var buf bytes.Buffer
	if _, err = buf.ReadFrom(b); err != nil {
		return nil, b, err
	}
	if err = b.Close(); err != nil {
		return nil, b, err
	}
	return ioutil.NopCloser(&buf), ioutil.NopCloser(bytes.NewReader(buf.Bytes())), nil
}
func drainBody ( b io . ReadCloser ) ( r1 , r2 io . ReadCloser , err error ) { if b == nil || b == http . NoBody { return http . NoBody , http . NoBody , nil } var buf bytes . Buffer if _ , err = buf . ReadFrom ( b ) ; err != nil { return nil , b , err } if err = b . Close ( ) ; err != nil { return nil , b , err } return ioutil . NopCloser ( & buf ) , ioutil . NopCloser ( bytes . NewReader ( buf . Bytes ( ) ) ) , nil }
drainBody will duplicate a reader into two separate readers
drainBody will duplicate a reader into two separate readers
// No copying needed. Preserve the magic sentinel meaning of NoBody.