Python Glossary English

все 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Сообщить о неточности