Рубрики
Без рубрики

Python HTTP-запрос клиента – Get, Post

Python HTTP-клиент, Python HTTP-запрос, Python HTTP GET, Python HTTP GET, Python HTTP Post, Python HTTP Put, Python HTTP Пример, Python HTTP.Client Module, заголовок клиента Python HTTP, Python HTTP Code Code Access Code.

Автор оригинала: 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, in 
    connection.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 док