]> granicus.if.org Git - python/commitdiff
Merged revisions 68458 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Sun, 18 Jan 2009 00:04:57 +0000 (00:04 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 18 Jan 2009 00:04:57 +0000 (00:04 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r68458 | kristjan.jonsson | 2009-01-09 14:23:16 -0600 (Fri, 09 Jan 2009) | 1 line

  Issue 4336:  HTTPRequest._send_output() now deals with the case of the message body not being a string.  This allows clients to use endheaders(message_body) instead of endheaders() + send(message_body) without making any extra checks.
........

Lib/http/client.py

index 34bf6a9395c313b4a13d7a50fad469d670d0ddeb..d2900b17b8d444fc5d9bc70242c8dd9fdb833618 100644 (file)
@@ -697,6 +697,7 @@ class HTTPConnection:
         """Send the currently buffered request and clear the buffer.
 
         Appends an extra \\r\\n to the buffer.
+        A message_body may be specified, to be appended to the request.
         """
         self._buffer.extend((b"", b""))
         msg = b"\r\n".join(self._buffer)
@@ -704,9 +705,14 @@ class HTTPConnection:
         # If msg and message_body are sent in a single send() call,
         # it will avoid performance problems caused by the interaction
         # between delayed ack and the Nagle algorithim.
-        if message_body is not None:
+        if isinstance(message_body, bytes):
             msg += message_body
+            message_body = None
         self.send(msg)
+        if message_body is not None:
+            #message_body was not a string (i.e. it is a file) and
+            #we must run the risk of Nagle
+            self.send(message_body)
 
     def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0):
         """Send a request to the server.
@@ -894,12 +900,7 @@ class HTTPConnection:
             self._set_content_length(body)
         for hdr, value in headers.items():
             self.putheader(hdr, value)
-        if isinstance(body, str):
-            self.endheaders(body.encode('ascii'))
-        else:
-            self.endheaders()
-            if body:  # when body is a file rather than a string
-                self.send(body)
+        self.endheaders(body.encode('ascii') if isinstance(body, str) else body)
 
     def getresponse(self):
         """Get the response from the server."""