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

Почему Python Devs Love Запросы

Запросы – это клиент HTTP I и каждый разработчик Python, которого я знаю, всегда достигаю, когда нам нужно тянуть … Tagged с Python, http, учебник.

Запросы – это клиент HTTP I и каждый разработчик Python, которого я знаю, всегда достигаю, когда нам нужно извлечь данные из удаленных источников. Только в июне 2021 года он получил 121 м. Питаться и имеет 45,5 тыс. Звезды GitHub на момент написания. Разработчики любят делать запросы с запросами!

Во время запросов оригинал выпуска в 2011 году URLLIB3 был высокоуровневой библиотекой HTTP по выбору, и запросы фактически используют его в качестве зависимости. Учитывая только у Urllib3 только жалкие звезды 2,7 тыс., Давайте посмотрим, почему Python A Developer выберет запросы по ним через некоторые примеры кода.

Мы основаем наши примеры на тех, которые найдены в urllib3 документация и создайте каждый пример снова, используя запросы.

Выполнение запроса на получение

urllib3:

import urllib3
http = urllib3.PoolManager()
resp = http.request("GET", "http://httpbin.org/robots.txt")
resp.status
200
resp.data
b'User-agent: *\nDisallow: /deny\n'

Запросы:

import requests

resp = requests.get("http://httpbin.org/robots.txt")

resp.status_code
200
res.text
'User-agent: *\nDisallow: /deny\n'

Создание запроса POST (данные формы)

urllib3:

import urllib3

http = urllib3.PoolManager()
resp = http.request(
    "POST",
    "https://httpbin.org/post",
    fields={"hello": "world"}
)

print(resp.data)

Запросы:

import requests

resp = requests.post(
    "https://httpbin.org/post", 
  data={"hello": "world"}
)

print(res.text)

Выполнение запроса на почту (данные JSON)

urllib3:

import json
import urllib3

data = {"attribute": "value"}

# Encoding the data in JSON format.
encoded_data = json.dumps(data).encode("utf-8")

http = urllib3.PoolManager()
resp = http.request(
    "POST",
    "https://httpbin.org/post",
    body=encoded_data, # Embedding JSON data into request body.
    headers={"Content-Type": "application/json"}
)

json.loads(resp.data.decode("utf-8"))

Запросы:

import requests

resp = requests.post('https://httpbin.org/post', 
    json={"attribute": "value"}
)

resp.json()

Различия в Urllib3

Одно очевидное отличие состоит в том, что нам больше не нужно создавать Poolmanager для выполнения наших запросов. Необходимость определить это для каждого сценария может стать утомительным, поэтому запросы убираются с ним. Как ни странно, Urllib3 документы штат Существует верхний уровень URLLIB3.Request (), чтобы спасти нас делать это, хотя примеры, похоже, не работают, когда я тестировал с версией 1.26.6.

HTTP Методы

Основное отличие здесь просто, но в конечном итоге то, что делает запросы так Гораздо проще работать – интерфейс метода HTTP. Есть только конечное количество HTTP -методы запроса Таким образом, они могут также быть функциями нашего клиента. Это также делает очень питоническим работать – я хочу позвонить в этот URL -адрес, поэтому я предоставляю URL в качестве аргумента .get () – просто. Здесь меньше возможностей для ошибок, учитывая, что мы не предоставляем тип метода в качестве аргумента, вызывая известный метод. Именно этот интерфейс делает код таким красивым простым по сравнению с Urllib3.

Встроенный кодирование/декодирование JSON

Другое отличие состоит в том, что запросы обрабатывают кодирование/декодирование JSON, общие операции, которые мы будем делать много при разговоре с службами JSON. Достаточно просто для любого разработчика, чтобы написать, но раздражает, учитывая, что каждый разработчик, который использует библиотеку, будет иметь для себя. Все эти файлы utils.py, загадывающие наш проект, будут иметь в них несколько меньше функций. Посмотрите, насколько проще этот последний пример становится в результате. Весь крут ушел!

Вывод

Конечно, другие клиенты HTTP доступны – и в зависимости от вашего конкретного варианта использования вполне может быть более подходящим. Поскольку пришли запросы, другие библиотеки (такие как асинхронное httpx ) приняли тот же простой, элегантный API.

Запросы определенно выиграли игру HTTP Client для Python, и вполне вероятно, что мы будем использовать его знакомый простой интерфейс в течение многих лет – даже если это не запросы, которые его предоставляют.

Оригинал: “https://dev.to/iwootten/why-python-devs-love-requests-11j2”