Гайд: как работать с библиотеками для отправки HTTP-запросов в Python

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Записки разработчика | Программы, сервисы и сайты

Если ты ищешь как отправлять http-запросы в python, то ты попал туда, куда нужно. Сегодня мы рассмотрим 2 python библиотеки для работы с http запросами.

Библиотека requests

Очень популярная библиотека, большинство людей начинают своё знакомство с http запросами в python именно с этой библиотеки.

Для начала нам нужно установить библиотеку. Открываем консоль (в Windows - cmd, в Linux и Mac OS - терминал) и вводим команду

pip install requests

После этого создаём файл и импортируем библиотеку

import requests

Теперь мы будем обращаться к сайтам при помощи http запросов. Существует несколько методов http. Сегодня мы рассмотрим только get. Его следует использовать при получении данных. Для примера мы обратимся к сайту https://google.com/

response = requests.get("https://google.com")

При помощи этой библиотеки мы можем очень просто указывать параметры для ссылки в виде словаря

query = {
    "param": "data", # здесь могут быть любые параметры 
    "param2": "data"
}

response = requests.get("https://google.com/", params=query)

Мы обратились к сайту, но как узнать статус сайта? Легко

print(response.status_code)

Из данной записи мы сможем узнать статус код сайта. Например статус код 200 обычно указывает, что всё прошло успешно. Также мы можем узнать html код сайта, если есть получить json объект и получить ссылку, по которой мы обращались к сайту

# html код
print(response.text)
# json объект
# print(response.json())  В данной ситуации не работает, т.к. на сайте нет json
# получение ссылки
print(response.url)

Довольно-таки простая библиотека для новичка

Библиотека aiohttp

Сейчас мы познакомимся с другой мощной библиотекой aiohttp, она позволяет отправлять запросы, в отличие от requests, асинхронно. Сейчас объясню кратко, чем отличается синхронность от асинхронности.

Например, простой пример - человек готовит себе завтрак

Его последовательность действий:

Он готовит яичницу, ждёт её приготовления, затем, человек начинает кипятить чайник и ждёт до того момента, пока он не вскипит. И только после этого продолжает свой список дел. Согласитесь довольно-таки медленно, ведь пока человек ждёт, он ничего не делает. Это был пример синхронности

При асинхронности человек во время ожидания выполняет другие дела.

Также и в программировании, чтобы программа не простаивала во время ожидания, существует асинхронный код

Давайте установим библиотеку aiohttp

pip install aiohttp

После установки открываем python файл и импортируем библиотеку, также для работы с асинхронностью следует импортировать модуль asyncio

import aiohttp
import asyncio

Затем нам нужно открыть сессию и отправить метод get на сайт https://google.com/

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp
        response = await session.get("https://google.com/") # отправка запроса

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл

Да, тут много не понятного для новичка. Всем тем, кому непонятен данный код, советую разобраться как работает асинхронность в python.

Мы также можем отправить параметры ссылки

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp 
        query = {
            "param": "data", 
            "param2": "data"
        } # параметры, тут можно указать любые
        response = await session.get("https://google.com/", params=query) # отправка запросов

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл 

Теперь мы можем получить статус код, json, текст и ссылку

# импорты
import aiohttp
import asyncio

# создаем асинхронную функцию
async def func():
    async with aiohttp.ClientSession() as session: # открытие сессии в aiohttp 
        query = {
            "param": "data", 
            "param2": "data"
        } # параметры, тут можно указать любые
        response = await session.get("https://google.com/", params=query) # отправка запросов
        print(response.status) # получение статус кода
        print(response.url) # получение ссылки
        # print(await response.json()) В данной ситуации не работает, т.к. на сайте нет json
        print(await response.text()) # получение html

loop = asyncio.new_event_loop() # создаём новый асинхронный цикл
loop.create_task(func()) # добавляем в него нашу функцию 
loop.run_forever() # запускаем цикл 

Итог

Мы научились отправлять http-запросы на сайт при помощи 2 python библиотек: requests и aiohttp. Выбор библиотеки зависит от тебя и от ситуации. В некоторых ситуациях полезен requests, в некоторых aiohttp. Выбор за тобой))

Автор не входит в состав редакции iXBT.com (подробнее »)
Об авторе
Человек, который считает себя программистом

9 комментариев

s
Открываем консоль и вводим команду
что за «консоль», где открываем. На смартфоне, на планшете, на утюге? Автор, на кого рассчитан данный текст?
102958348473496338014@google
Как минимум на человека, который хоть немного разбирается в языках программирования.
4535348@vkontakte
процентов 20-30 новостей про машины, причем новостей для новостей.
S
Человек, который хоть немного разбирается, в том объеме, который в данной статье, разберется с этими либами с помощью штатной справки или stackoverflow за 5 минут.
GennDALF
Полагаю, статья рассчитана на тех новичков, которые изучали основы Python и уже представляют себе функции, менеджеры контекста, модель языка в целом. Но не лазили по пакетам и не имели дело с сетевыми запросами.
Если это так, то, конечно, сетевую часть стоит раскрыть подробнее. Особенно асинхронку.
Ссылки на документацию пакетов тоже обязательно должны быть.
102958348473496338014@google
Спасибо за комментарий)
GennDALF
И про выбор между синхронным и асинхронным подходами — хотя бы обозначить, куда копать, чтобы определиться с критериями выбора.
Я бы сам с удовольствием об этом почитал. Реальной практики в асинхронных проектах, например, у меня нет.

Добавить комментарий

Сейчас на главной

Новости

Публикации

Первый гревел Shulz: изучаем прототип велосипеда The Lightning

Бренд Shulz наконец-то дал возможность всесторонне рассмотреть, что из себя будет представлять первый гревел компании. Выпущенный видеоролик-анонс состоит из двух частей. В первой ведущий канала...

С какой скоростью надо ездить по лужам

В дождливую погоду дороги становятся особенно коварными, а лужи на асфальте — не просто лужи, а настоящие испытания для водителя и его автомобиля. Каждая такая встреча скрывает риски: от...

Почему на современных стиральных машиных нельзя отключить отжим, и как это исправить вручную

Если на моделях стиральных машин 7-10 летней давности управление оборотами отжима (вплоть до 0) было базовой возможностью, то у современной техники подобная функция встречается всё реже. Но для...

Как можно узнать, сколько герц в экране Айфона и на что они влияют

В мире смартфонов происходит настоящая революция, связанная с частотой обновления экранов. Долгое время стандартом считались 60 Гц, но теперь производители, включая Apple, переходят на более...

Как одеваться в жаркую погоду, чтобы было комфортно

Лето — пора яркого солнца и прогулок на свежем воздухе. Но высокая температура может стать настоящим вызовом, если тщательно не продумать образ. Поговорим о том, как правильно одеваться...

Обзор MobaPad M6S: максимально удобная альтернатива Joy-Conn для Nintendo Switch

Над альтернативой для штатных Joy-Conn игровой консоли Nintendo Switch работали сразу несколько производителей, причем относительного успеха добился каждый из них, но по возможностям лучше, чем...