все Python 3http.clientпонятие
http.client.HTTPResponse
ответ
Ответ сервера, который возвращает getresponse(): статус, заголовки и тело. Тело читается методом read() и приходит байтами.
Синтаксис
resp = conn.getresponse(); resp.status; resp.reason; resp.getheader(name); resp.read()
Тело можно прочитать только один раз: повторный read() вернёт b''. Приходит оно байтами, а не строкой — декодируйте по charset из Content-Type. Заголовки ищутся без учёта регистра через getheader(), а пропущенный заголовок даёт None, а не KeyError. Пока ответ не дочитан, на том же соединении новый запрос не отправить. Chunked-кодирование разбирается само; создавать HTTPResponse руками нужно редко — разве что поверх своего сокета.
Примеры
import http.client
import socket
server, client = socket.socketpair()
server.sendall(b'HTTP/1.1 200 OK\r\nContent-Type: text/plain; charset=utf-8\r\n' b'Content-Length: 5\r\n\r\nhello')
server.close()
resp = http.client.HTTPResponse(client)
resp.begin() # getresponse() делает это сам
print(resp.status, resp.reason) # → 200 OK
print(resp.getheader('content-type')) # → text/plain; charset=utf-8
print(resp.getheader('X-Missing')) # → None
print(resp.read(), resp.read()) # → b'hello' b''
client.close()
import http.client
import socket
server, client = socket.socketpair()
server.sendall(b'HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n' b'3\r\nabc\r\n2\r\nde\r\n0\r\n\r\n')
server.close()
resp = http.client.HTTPResponse(client)
resp.begin()
print(resp.read().decode()) # → abcde — куски склеены автоматически
client.close()
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности