1

Python 3.3/Lib/urllib/request.py课堂下AbstractHTTPHandler(BaseHandler),第1252行

h.request(req.get_method(), req.selector, req.data, headers)

Python 3.3/Lib/http/client.pyin class下HTTPConnection,在以下几行中:

第 1047 行

def request(self, method, url, body=None, headers={}):

1068行

def _send_request(self, method, url, body, headers):

1087 号线

self.endheaders(正文)

上面的 body 和 req.data 将对应相同的字符串或其他数据,当urllib.request.urlopen(req, data)调用request(method, url, body=None, headers={}).http.client.HTTPConnection

这是否意味着以下两个相同?(他们在文档中似乎不一样)

  1. HTTPConnection.endheaders(data)
  2. HTTPConnection.endheaders(),HTTPConnection.send(data)

我完全糊涂了。

4

1 回答 1

1

endheaders内部使用send(间接)。差异可能在于性能。如果data是字节对象,则.endheaders(data)尝试将标头和数据一起发送。请参阅中的评论_send_output()

896         # If msg and message_body are sent in a single send() call,
897         # it will avoid performance problems caused by the interaction
898         # between delayed ack and the Nagle algorithm.
于 2013-04-08T02:23:26.437 回答