Автор оригинала: Pankaj Kumar.
Модуль Python HTTP определяет классы, которые обеспечивают клиентскую сторону протоколов HTTP и HTTPS. В большинстве программ HTTP-модуль не используется напрямую и является клубным с помощью Урлыб
Модуль для обработки URL-соединений и взаимодействия с HTTP-запросами. Сегодня мы узнаем, как использовать клиент Python HTTP, чтобы пожарить HTTP-запрос, а затем проанализировать статус ответа и получить данные об откликах.
Python HTTP-клиент
В этом посте на модуле Python HTTP мы попробуем попытаться сделать соединения и делать HTTP-запросы, такие как Get, Post и поставить. Давайте начнем.
Изготовление HTTP-соединений
Начнем с простейшей вещи HTTP-модуль может сделать. Мы можем легко сделать HTTP-соединения с помощью этого модуля. Вот образец программы:
import http.client connection = http.client.HTTPConnection('www.python.org', 80, timeout=10) print(connection)
Давайте посмотрим на вывод этой программы: в этом скрипте мы подключены к URL-адресу в порту 80 с определенным тайм-аутом.
Python HTTP Get.
Теперь мы будем использовать HTTP-клиент, чтобы получить ответ и состояние с URL. Давайте посмотрим на фрагмент кода:
import http.client connection = http.client.HTTPSConnection("www.journaldev.com") connection.request("GET", "/") response = connection.getresponse() print("Status: {} and reason: {}".format(response.status, response.reason)) connection.close()
В приведенном выше скрипте мы использовали URL-адрес и проверили статус с объектом подключения. Давайте посмотрим на вывод этой программы: Не забудьте закрыть соединение, как только вы закончите с объектом подключения. Кроме того, обратите внимание, что мы использовали Httpsconnection
Чтобы установить соединение, поскольку сайт подается за Https протокол.
Получение SSL: сертификат_verify_failed ошибка?
Когда я впервые выполнил вышеуказанную программу, я получен после ошибки, связанной с сертификатами SSL.
$ python3.6 http_client.py Traceback (most recent call last): File "http_client.py", line 4, inconnection.request("GET", "/") File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output self.send(msg) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send self.connect() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect server_hostname=server_hostname) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket context=self, session=session) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in init self.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake self._sslobj.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748) $
С вывода было ясно, что он должен сделать что-то с помощью сертификатов SSL. Но сертификат сайта в порядке, поэтому он должен быть что-то с моей настройкой. После некоторого гугула я обнаружил, что на MacOS нам нужно бежать Установить сертификаты.command
Файл, присутствующий в каталоге установки Python, чтобы исправить эту проблему. Ниже изображения показывает вывод, создаваемый этим выполнением этой команды, похоже, что она устанавливает последние сертификаты, которые будут использоваться при выполнении подключений SSL.
Обратите внимание, что я получил эту ошибку на Mac OS. Однако на моей системе Ubuntu она работала совершенно нормально.
Python HTTP клиент Ubuntu
Получение списка заголовков от ответа
Из ответа мы получаем, заголовки обычно также содержат важную информацию о типе данных, отправленных обратно с сервера и статуса ответа. Мы можем получить список заголовков из самого объекта ответа. Давайте посмотрим на фрагмент кода, который является небольшим модифицированным версией последней программы:
import http.client import pprint connection = http.client.HTTPSConnection("www.journaldev.com") connection.request("GET", "/") response = connection.getresponse() headers = response.getheaders() pp = pprint.PrettyPrinter(indent=4) pp.pprint("Headers: {}".format(headers))
Давайте посмотрим на вывод этой программы:
Python HTTP POST.
Мы также можем опубликовать данные в URL-адрес с модулем HTTP и получить ответ. Вот образец программы:
import http.client import json conn = http.client.HTTPSConnection('www.httpbin.org') headers = {'Content-type': 'application/json'} foo = {'text': 'Hello HTTP #1 **cool**, and #1!'} json_data = json.dumps(foo) conn.request('POST', '/post', json_data, headers) response = conn.getresponse() print(response.read().decode())
Давайте посмотрим на вывод этой программы: не стесняйтесь использовать библиотеку BIN HTTP, чтобы попробовать больше запросов.
Python http поставленный запрос
Конечно, мы также можем выполнить запрос на поставку, используя сам модуль HTTP. Мы будем использовать саму последнюю программу. Давайте посмотрим на фрагмент кода:
import http.client import json conn = http.client.HTTPSConnection('www.httpbin.org') headers = {'Content-type': 'application/json'} foo = {'text': 'Hello HTTP #1 **cool**, and #1!'} json_data = json.dumps(foo) conn.request("PUT", "/put", json_data) response = conn.getresponse() print(response.status, response.reason)
Давайте посмотрим на вывод этой программы:
Заключение
В этом уроке мы изучали простые операции HTTP, которые можно сделать, используя http.client
Отказ Мы также можем создать HTTP-сервер Python, используя SimpleHttPerver модуль.
Ссылка: API док