Я бы предположил, что если вы уже знаете размер ваших данных, как в ответе , вы можете просто установить Content-Length
и отправить все обратно одним ударом, что вроде какв любом случае вы выполняете один вызов conn.send
.
Кодирование с частичной передачей наиболее полезно, когда вы не знаете, насколько велики данные, например динамически генерируемый контент.Я изменил ваш код для иллюстрации:
import httplib
def write_chunk(conn, data):
conn.send("%s\r\n" % hex(len(data))[2:])
conn.send("%s\r\n" % data)
def dynamically_generate_data():
for i in range(80):
yield "hello world"
conn = httplib.HTTPConnection("localhost")
url = "/some_path"
conn.putrequest('POST', url)
conn.putheader('Transfer-Encoding', 'chunked')
conn.endheaders()
for new_chunk in dynamically_generate_data():
write_chunk(conn, new_chunk)
conn.send('0\r\n')
resp = conn.getresponse()
print(resp.status, resp.reason)
conn.close()