diff --git a/urlfetch/urlfetch.go b/urlfetch/urlfetch.go
index <HASH>..<HASH> 100644
--- a/urlfetch/urlfetch.go
+++ b/urlfetch/urlfetch.go
@@ -152,9 +152,17 @@ func (t *Transport) RoundTrip(req *http.Request) (res *http.Response, err error)
 		}
 	}
 	if methodAcceptsRequestBody[req.Method] && req.Body != nil {
-		freq.Payload, err = ioutil.ReadAll(req.Body)
-		if err != nil {
-			return nil, err
+		// Avoid a []byte copy if req.Body has a Bytes method.
+		switch b := req.Body.(type) {
+		case interface {
+			Bytes() []byte
+		}:
+			freq.Payload = b.Bytes()
+		default:
+			freq.Payload, err = ioutil.ReadAll(req.Body)
+			if err != nil {
+				return nil, err
+			}
 		}
 	}
appengine/urlfetch: Avoid []byte copy for outgoing body when has a Bytes method.

Change-Id: If<I>dfeac1a6aa1c2f3f<I>bac<I>b9b6