httplib.md
1> **Источник:** https://python-all.ru/2.7/library/httplib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.7. [`httplib`](https://python-all.ru/2.7/library/httplib.html#module-httplib) – клиент протокола HTTP89> **Примечание**10>11> Модуль [`httplib`](https://python-all.ru/2.7/library/httplib.html#module-httplib) переименован в `http.client` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходных кодов в Python 3.1213**Исходный код:** [Lib/httplib.py](https://python-all.ru/src/2.7/Lib/httplib.py)1415---1617Этот модуль определяет классы, реализующие клиентскую сторону протоколов HTTP и HTTPS. Обычно он не используется напрямую – модуль [`urllib`](https://python-all.ru/2.7/library/urllib.html#module-urllib) использует его для обработки URL, использующих HTTP и HTTPS.1819> **См. также**20>21> Для высокоуровневого интерфейса HTTP-клиента рекомендуется [пакет Requests](https://python-all.ru/2.7/library/httplib.html).2223> **Примечание**24>25> Поддержка HTTPS доступна только в том случае, если модуль [`socket`](https://python-all.ru/2.7/library/socket.html#module-socket) был скомпилирован с поддержкой SSL.2627> **Примечание**28>29> Публичный интерфейс этого модуля существенно изменился в Python 2.0. Класс `HTTP` сохранён только для обратной совместимости с версией 1.5.2. Его не следует использовать в новом коде. Обратитесь к онлайн-докстрингам за инструкциями по использованию.3031Модуль предоставляет следующие классы:3233#### `class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])`3435Экземпляр [`HTTPConnection`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPConnection) представляет одну транзакцию с HTTP-сервером. Его следует создавать, передавая ему хост и опционально номер порта. Если номер порта не передан, порт извлекается из строки хоста, если она имеет форму `host:port`; в противном случае используется порт HTTP по умолчанию (80). Если необязательный параметр *strict* равен true (по умолчанию false), то `BadStatusLine` будет возбуждено, если строка статуса не может быть разобрана как допустимая строка статуса HTTP/1.0 или 1.1. Если задан необязательный параметр *timeout*, блокирующие операции (например, попытки соединения) будут прерываться по таймауту через указанное количество секунд (если он не задан, используется глобальная настройка таймаута по умолчанию). Необязательный параметр *source\_address* может быть кортежем (host, port), используемым в качестве исходного адреса для HTTP-соединения.3637Например, следующие вызовы создают экземпляры, подключающиеся к одному и тому же серверу по одному и тому же хосту и порту:3839```python40>>> h1 = httplib.HTTPConnection('www.cwi.nl')41>>> h2 = httplib.HTTPConnection('www.cwi.nl:80')42>>> h3 = httplib.HTTPConnection('www.cwi.nl', 80)43>>> h3 = httplib.HTTPConnection('www.cwi.nl', 80, timeout=10)44```4546Новое в версии 2.0.4748Изменено в версии 2.6: добавлен параметр *timeout*.4950Изменено в версии 2.7: *source\_address* был добавлен.5152#### `class httplib.HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout[, source_address[, context]]]]]]])`5354Подкласс [`HTTPConnection`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPConnection), использующий SSL для связи с защищёнными серверами. Порт по умолчанию – `443`. Если указан *context*, он должен быть экземпляром [`ssl.SSLContext`](https://python-all.ru/2.7/library/ssl.html#ssl.SSLContext), описывающим различные параметры SSL.5556*key\_file* и *cert\_file* устарели; используйте вместо них [`ssl.SSLContext.load_cert_chain()`](https://python-all.ru/2.7/library/ssl.html#ssl.SSLContext.load_cert_chain) или позвольте [`ssl.create_default_context()`](https://python-all.ru/2.7/library/ssl.html#ssl.create_default_context) выбрать доверенные сертификаты CA системы.5758Пожалуйста, прочитайте [Рекомендации по безопасности](https://python-all.ru/2.7/library/ssl.html#ssl-security) для получения дополнительной информации о лучших практиках.5960Новое в версии 2.0.6162Изменено в версии 2.6: добавлен параметр *timeout*.6364Изменено в версии 2.7: *source\_address* был добавлен.6566Изменено в версии 2.7.9: *context* был добавлен.6768Теперь этот класс по умолчанию выполняет все необходимые проверки сертификатов и имён хостов. Чтобы вернуться к предыдущему, непроверенному поведению, `ssl._create_unverified_context()` можно передать в параметр *context*.6970#### `class httplib.HTTPResponse(sock, debuglevel=0, strict=0)`7172Класс, экземпляры которого возвращаются при успешном подключении. Не создаётся напрямую пользователем.7374Новое в версии 2.0.7576#### `class httplib.HTTPMessage`7778Экземпляр [`HTTPMessage`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPMessage) используется для хранения заголовков HTTP-ответа. Он реализован с помощью класса [`mimetools.Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message) и предоставляет вспомогательные функции для работы с HTTP-заголовками. Пользователи не создают его экземпляры напрямую.7980При необходимости генерируются следующие исключения:8182#### `exception httplib.HTTPException`8384Базовый класс остальных исключений в этом модуле. Является подклассом [`Exception`](https://python-all.ru/2.7/library/exceptions.html#exceptions.Exception).8586Новое в версии 2.0.8788#### `exception httplib.NotConnected`8990Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).9192Новое в версии 2.0.9394#### `exception httplib.InvalidURL`9596Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException), возбуждается, если указан порт, который не является числом или пуст.9798Новое в версии 2.3.99100#### `exception httplib.UnknownProtocol`101102Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).103104Новое в версии 2.0.105106#### `exception httplib.UnknownTransferEncoding`107108Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).109110Новое в версии 2.0.111112#### `exception httplib.UnimplementedFileMode`113114Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).115116Новое в версии 2.0.117118#### `exception httplib.IncompleteRead`119120Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).121122Новое в версии 2.0.123124#### `exception httplib.ImproperConnectionState`125126Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException).127128Новое в версии 2.0.129130#### `exception httplib.CannotSendRequest`131132Подкласс [`ImproperConnectionState`](https://python-all.ru/2.7/library/httplib.html#httplib.ImproperConnectionState).133134Новое в версии 2.0.135136#### `exception httplib.CannotSendHeader`137138Подкласс [`ImproperConnectionState`](https://python-all.ru/2.7/library/httplib.html#httplib.ImproperConnectionState).139140Новое в версии 2.0.141142#### `exception httplib.ResponseNotReady`143144Подкласс [`ImproperConnectionState`](https://python-all.ru/2.7/library/httplib.html#httplib.ImproperConnectionState).145146Новое в версии 2.0.147148#### `exception httplib.BadStatusLine`149150Подкласс [`HTTPException`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPException). Возбуждается, если сервер отвечает HTTP-кодом состояния, который не распознаётся.151152Новое в версии 2.0.153154Константы, определённые в этом модуле:155156#### `httplib.HTTP_PORT`157158Порт по умолчанию для протокола HTTP (всегда `80`).159160#### `httplib.HTTPS_PORT`161162Порт по умолчанию для протокола HTTPS (всегда `443`).163164а также следующие константы для целочисленных кодов состояния:165166| Константа | Значение | Определение |167| --- | --- | --- |168| `CONTINUE` | `100` | HTTP/1.1, [RFC 2616, раздел 10.1.1](https://python-all.ru/2.7/library/httplib.html) |169| `SWITCHING_PROTOCOLS` | `101` | HTTP/1.1, [RFC 2616, раздел 10.1.2](https://python-all.ru/2.7/library/httplib.html) |170| `PROCESSING` | `102` | WEBDAV, [RFC 2518, раздел 10.1](https://python-all.ru/2.7/library/httplib.html) |171| `OK` | `200` | HTTP/1.1, [RFC 2616, раздел 10.2.1](https://python-all.ru/2.7/library/httplib.html) |172| `CREATED` | `201` | HTTP/1.1, [RFC 2616, раздел 10.2.2](https://python-all.ru/2.7/library/httplib.html) |173| `ACCEPTED` | `202` | HTTP/1.1, [RFC 2616, раздел 10.2.3](https://python-all.ru/2.7/library/httplib.html) |174| `NON_AUTHORITATIVE_INFORMATION` | `203` | HTTP/1.1, [RFC 2616, раздел 10.2.4](https://python-all.ru/2.7/library/httplib.html) |175| `NO_CONTENT` | `204` | HTTP/1.1, [RFC 2616, раздел 10.2.5](https://python-all.ru/2.7/library/httplib.html) |176| `RESET_CONTENT` | `205` | HTTP/1.1, [RFC 2616, раздел 10.2.6](https://python-all.ru/2.7/library/httplib.html) |177| `PARTIAL_CONTENT` | `206` | HTTP/1.1, [RFC 2616, раздел 10.2.7](https://python-all.ru/2.7/library/httplib.html) |178| `MULTI_STATUS` | `207` | WEBDAV [RFC 2518, раздел 10.2](https://python-all.ru/2.7/library/httplib.html) |179| `IM_USED` | `226` | Дельта-кодирование в HTTP, [**RFC 3229**](https://python-all.ru/2.7/library/httplib.html), раздел 10.4.1 |180| `MULTIPLE_CHOICES` | `300` | HTTP/1.1, [RFC 2616, раздел 10.3.1](https://python-all.ru/2.7/library/httplib.html) |181| `MOVED_PERMANENTLY` | `301` | HTTP/1.1, [RFC 2616, раздел 10.3.2](https://python-all.ru/2.7/library/httplib.html) |182| `FOUND` | `302` | HTTP/1.1, [RFC 2616, раздел 10.3.3](https://python-all.ru/2.7/library/httplib.html) |183| `SEE_OTHER` | `303` | HTTP/1.1, [RFC 2616, раздел 10.3.4](https://python-all.ru/2.7/library/httplib.html) |184| `NOT_MODIFIED` | `304` | HTTP/1.1, [RFC 2616, раздел 10.3.5](https://python-all.ru/2.7/library/httplib.html) |185| `USE_PROXY` | `305` | HTTP/1.1, [RFC 2616, раздел 10.3.6](https://python-all.ru/2.7/library/httplib.html) |186| `TEMPORARY_REDIRECT` | `307` | HTTP/1.1, [RFC 2616, раздел 10.3.8](https://python-all.ru/2.7/library/httplib.html) |187| `BAD_REQUEST` | `400` | HTTP/1.1, [RFC 2616, раздел 10.4.1](https://python-all.ru/2.7/library/httplib.html) |188| `UNAUTHORIZED` | `401` | HTTP/1.1, [RFC 2616, раздел 10.4.2](https://python-all.ru/2.7/library/httplib.html) |189| `PAYMENT_REQUIRED` | `402` | HTTP/1.1, [RFC 2616, раздел 10.4.3](https://python-all.ru/2.7/library/httplib.html) |190| `FORBIDDEN` | `403` | HTTP/1.1, [RFC 2616, раздел 10.4.4](https://python-all.ru/2.7/library/httplib.html) |191| `NOT_FOUND` | `404` | HTTP/1.1, [RFC 2616, раздел 10.4.5](https://python-all.ru/2.7/library/httplib.html) |192| `METHOD_NOT_ALLOWED` | `405` | HTTP/1.1, [RFC 2616, раздел 10.4.6](https://python-all.ru/2.7/library/httplib.html) |193| `NOT_ACCEPTABLE` | `406` | HTTP/1.1, [RFC 2616, раздел 10.4.7](https://python-all.ru/2.7/library/httplib.html) |194| `PROXY_AUTHENTICATION_REQUIRED` | `407` | HTTP/1.1, [RFC 2616, раздел 10.4.8](https://python-all.ru/2.7/library/httplib.html) |195| `REQUEST_TIMEOUT` | `408` | HTTP/1.1, [RFC 2616, раздел 10.4.9](https://python-all.ru/2.7/library/httplib.html) |196| `CONFLICT` | `409` | HTTP/1.1, [RFC 2616, раздел 10.4.10](https://python-all.ru/2.7/library/httplib.html) |197| `GONE` | `410` | HTTP/1.1, [RFC 2616, раздел 10.4.11](https://python-all.ru/2.7/library/httplib.html) |198| `LENGTH_REQUIRED` | `411` | HTTP/1.1, [RFC 2616, раздел 10.4.12](https://python-all.ru/2.7/library/httplib.html) |199| `PRECONDITION_FAILED` | `412` | HTTP/1.1, [RFC 2616, раздел 10.4.13](https://python-all.ru/2.7/library/httplib.html) |200| `REQUEST_ENTITY_TOO_LARGE` | `413` | HTTP/1.1, [RFC 2616, раздел 10.4.14](https://python-all.ru/2.7/library/httplib.html) |201| `REQUEST_URI_TOO_LONG` | `414` | HTTP/1.1, [RFC 2616, раздел 10.4.15](https://python-all.ru/2.7/library/httplib.html) |202| `UNSUPPORTED_MEDIA_TYPE` | `415` | HTTP/1.1, [RFC 2616, раздел 10.4.16](https://python-all.ru/2.7/library/httplib.html) |203| `REQUESTED_RANGE_NOT_SATISFIABLE` | `416` | HTTP/1.1, [RFC 2616, раздел 10.4.17](https://python-all.ru/2.7/library/httplib.html) |204| `EXPECTATION_FAILED` | `417` | HTTP/1.1, [RFC 2616, раздел 10.4.18](https://python-all.ru/2.7/library/httplib.html) |205| `UNPROCESSABLE_ENTITY` | `422` | WEBDAV, [RFC 2518, раздел 10.3](https://python-all.ru/2.7/library/httplib.html) |206| `LOCKED` | `423` | WEBDAV [RFC 2518, раздел 10.4](https://python-all.ru/2.7/library/httplib.html) |207| `FAILED_DEPENDENCY` | `424` | WEBDAV, [RFC 2518, раздел 10.5](https://python-all.ru/2.7/library/httplib.html) |208| `UPGRADE_REQUIRED` | `426` | Обновление HTTP до TLS, [**RFC 2817**](https://python-all.ru/2.7/library/httplib.html), раздел 6 |209| `INTERNAL_SERVER_ERROR` | `500` | HTTP/1.1, [RFC 2616, раздел 10.5.1](https://python-all.ru/2.7/library/httplib.html) |210| `NOT_IMPLEMENTED` | `501` | HTTP/1.1, [RFC 2616, раздел 10.5.2](https://python-all.ru/2.7/library/httplib.html) |211| `BAD_GATEWAY` | `502` | HTTP/1.1 [RFC 2616, раздел 10.5.3](https://python-all.ru/2.7/library/httplib.html) |212| `SERVICE_UNAVAILABLE` | `503` | HTTP/1.1, [RFC 2616, раздел 10.5.4](https://python-all.ru/2.7/library/httplib.html) |213| `GATEWAY_TIMEOUT` | `504` | HTTP/1.1 [RFC 2616, раздел 10.5.5](https://python-all.ru/2.7/library/httplib.html) |214| `HTTP_VERSION_NOT_SUPPORTED` | `505` | HTTP/1.1, [RFC 2616, раздел 10.5.6](https://python-all.ru/2.7/library/httplib.html) |215| `INSUFFICIENT_STORAGE` | `507` | WEBDAV, [RFC 2518, раздел 10.6](https://python-all.ru/2.7/library/httplib.html) |216| `NOT_EXTENDED` | `510` | Расширение HTTP Framework, [**RFC 2774**](https://python-all.ru/2.7/library/httplib.html), раздел 7 |217218#### `httplib.responses`219220Этот словарь сопоставляет коды состояния HTTP 1.1 с названиями W3C.221222Пример: `httplib.responses[httplib.NOT_FOUND]` – это `'Not Found'`.223224Новое в версии 2.5.225226## 20.7.1. Объекты HTTPConnection227228Экземпляры [`HTTPConnection`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPConnection) имеют следующие методы:229230#### `HTTPConnection.request(method, url[, body[, headers]])`231232Этот метод отправляет запрос на сервер, используя HTTP-метод *method* и селектор *url*. Если аргумент *body* присутствует, он должен быть строкой с данными, которые будут отправлены после заголовков. Альтернативно, это может быть открытый файловый объект; в этом случае отправляется содержимое файла. Этот файловый объект должен поддерживать методы `fileno()` и `read()`. Аргумент *headers* должен быть отображением (mapping) дополнительных HTTP-заголовков для отправки вместе с запросом.233234Если заголовок не указан в *headers*, заголовок `Content-Length` добавляется автоматически для всех методов, если длина тела может быть определена – либо из длины представления `str`, либо из указанного размера файла на диске. Если *body* равен `None`, заголовок не устанавливается, за исключением методов, которые ожидают тело (`PUT`, `POST` и `PATCH`); в этом случае он устанавливается в `0`.235236Изменено в версии 2.6: *body* может быть файловым объектом.237238#### `HTTPConnection.getresponse()`239240Должен вызываться после отправки запроса для получения ответа от сервера. Возвращает экземпляр [`HTTPResponse`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPResponse).241242> **Примечание**243>244> Обратите внимание: необходимо прочитать весь ответ, прежде чем отправлять новый запрос на сервер.245246#### `HTTPConnection.set_debuglevel(level)`247248Устанавливает уровень отладки (количество выводимой отладочной информации). Уровень отладки по умолчанию – `0`, то есть отладочная информация не выводится.249250#### `HTTPConnection.set_tunnel(host, port=None, headers=None)`251252Устанавливает хост и порт для HTTP Connect Tunnelling. Обычно используется, когда требуется выполнить HTTPS-соединение через прокси-сервер.253254Аргумент headers должен быть отображением дополнительных HTTP-заголовков, отправляемых с запросом CONNECT.255256Новое в версии 2.7.257258#### `HTTPConnection.connect()`259260Подключается к серверу, указанному при создании объекта.261262#### `HTTPConnection.close()`263264Закрывает соединение с сервером.265266В качестве альтернативы использованию описанного выше метода `request()` вы также можете отправлять запрос пошагово, используя четыре функции, приведённые ниже.267268#### `HTTPConnection.putrequest(request, selector[, skip_host[, skip_accept_encoding]])`269270Это должен быть первый вызов после установления соединения с сервером. Он отправляет на сервер строку, состоящую из строки *request*, строки *selector* и версии HTTP (`HTTP/1.1`). Чтобы отключить автоматическую отправку заголовков `Host:` или `Accept-Encoding:` (например, для принятия дополнительных кодировок содержимого), укажите *skip\_host* или *skip\_accept\_encoding* с отличными от False значениями.271272Изменено в версии 2.4: *skip\_accept\_encoding* аргумент добавлен.273274#### `HTTPConnection.putheader(header, argument[, ...])`275276Отправляет заголовок в стиле [**RFC 822**](https://python-all.ru/2.7/library/httplib.html) на сервер. Он отправляет строку, состоящую из заголовка, двоеточия, пробела и первого аргумента. Если заданы дополнительные аргументы, отправляются строки продолжения, каждая из которых состоит из табуляции и аргумента.277278#### `HTTPConnection.endheaders(message_body=None)`279280Отправляет пустую строку серверу, сигнализируя об окончании заголовков. Необязательный аргумент *message\_body* можно использовать для передачи тела сообщения, связанного с запросом. Тело сообщения будет отправлено в том же пакете, что и заголовки, если оно является строкой; в противном случае оно отправляется в отдельном пакете.281282Изменено в версии 2.7: *message\_body* был добавлен.283284#### `HTTPConnection.send(data)`285286Отправляет данные на сервер. Это следует использовать напрямую только после вызова метода [`endheaders()`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPConnection.endheaders) и до вызова [`getresponse()`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPConnection.getresponse).287288## 20.7.2. Объекты HTTPResponse289290Экземпляры [`HTTPResponse`](https://python-all.ru/2.7/library/httplib.html#httplib.HTTPResponse) имеют следующие методы и атрибуты:291292#### `HTTPResponse.read([amt])`293294Читает и возвращает тело ответа, или до следующих *amt* байт.295296#### `HTTPResponse.getheader(name[, default])`297298Возвращает содержимое заголовка *name* или *default*, если соответствующий заголовок отсутствует.299300#### `HTTPResponse.getheaders()`301302Возвращает список кортежей (заголовок, значение).303304Новое в версии 2.4.305306#### `HTTPResponse.fileno()`307308Возвращает `fileno` базового сокета.309310#### `HTTPResponse.msg`311312Экземпляр [`mimetools.Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message), содержащий заголовки ответа.313314#### `HTTPResponse.version`315316Версия протокола HTTP, используемая сервером. 10 для HTTP/1.0, 11 для HTTP/1.1.317318#### `HTTPResponse.status`319320Код состояния, возвращаемый сервером.321322#### `HTTPResponse.reason`323324Фраза причины, возвращаемая сервером.325326## 20.7.3. Примеры327328Вот пример сеанса, в котором используется метод `GET`:329330```python331>>> import httplib332>>> conn = httplib.HTTPSConnection("www.python.org")333>>> conn.request("GET", "/")334>>> r1 = conn.getresponse()335>>> print r1.status, r1.reason336200 OK337>>> data1 = r1.read()338>>> conn.request("GET", "/")339>>> r2 = conn.getresponse()340>>> print r2.status, r2.reason341404 Not Found342>>> data2 = r2.read()343>>> conn.close()344```345346Вот пример сеанса, в котором используется метод `HEAD`. Обратите внимание, что метод `HEAD` никогда не возвращает данные.347348```python349>>> import httplib350>>> conn = httplib.HTTPSConnection("www.python.org")351>>> conn.request("HEAD","/")352>>> res = conn.getresponse()353>>> print res.status, res.reason354200 OK355>>> data = res.read()356>>> print len(data)3570358>>> data == ''359True360```361362Ниже приведён пример сеанса, показывающий, как отправлять `POST` запросы:363364```python365>>> import httplib, urllib366>>> params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})367>>> headers = {"Content-type": "application/x-www-form-urlencoded",368... "Accept": "text/plain"}369>>> conn = httplib.HTTPConnection("bugs.python.org")370>>> conn.request("POST", "", params, headers)371>>> response = conn.getresponse()372>>> print response.status, response.reason373302 Found374>>> data = response.read()375>>> data376'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'377>>> conn.close()378```379380Клиентские запросы `HTTP PUT` очень похожи на запросы `POST`. Разница состоит только на стороне сервера: HTTP-сервер позволяет создавать ресурсы с помощью запроса `PUT`. Ниже приведён пример сеанса работы, показывающий, как выполнить запрос `PUT` с помощью httplib:381382```python383>>> # Это создаёт HTTP-сообщение.384>>> # с содержимым BODY в качестве вложенного представления385>>> # для ресурса http://localhost:8080/foobar386...387>>> import httplib388>>> BODY = "***filecontents***"389>>> conn = httplib.HTTPConnection("localhost", 8080)390>>> conn.request("PUT", "/file", BODY)391>>> response = conn.getresponse()392>>> print response.status, response.reason393200, OK394```395