Гайд: как работать с библиотеками для отправки 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
И про выбор между синхронным и асинхронным подходами — хотя бы обозначить, куда копать, чтобы определиться с критериями выбора.
Я бы сам с удовольствием об этом почитал. Реальной практики в асинхронных проектах, например, у меня нет.

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

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

Новости

Публикации

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

Практически все хоть раз на просторах сети видели фотографии Золотого моста во Вьетнаме. Того самого, который держат огромные каменные руки, вырастающие из скалы. Они выглядят как древний памятник,...

Автоматический поиск по паузам в «Олимп-005»: как это работало и почему сбоило

Советский катушечный магнитофон «Олимп-005» выделялся на фоне аналогов наличием системы автоматического поиска треков. Для аналоговой магнитной ленты это была нетривиальная задача. Разберем, как...

Плохая управляемость и повышенный расход: почему двойные колёса не прижились на легковушках

Сегодня двускатные колёса прочно ассоциируются с тяжёлыми грузовиками — они нужны для распределения нагрузки и повышения грузоподъёмности. Но мало кто помнит, что когда‑то такую схему...

Почему знакомство с Linux стоит начать с дистрибутива Void

Void Linux подходит тем, кто хочет пользоваться системой и одновременно разобраться в ее устройстве. В отличие от дистрибутивов, где обучение часто сводится к одному сложному этапу установки, Void...

5 настроек роутера, которые делают домашнюю сеть стабильнее и безопаснее, от WPA3 до SQM

Роутер часто работает с теми параметрами, которые были выбраны во время первичной настройки. На мощных устройствах с продуманной системой или устройствах на кастомных прошивках как OpenWRT это...

Маленький, яркий и многофункциональный. Обзор фонарика Sofirn SE1

Sofirn SE1 — это маленький, лёгкий, многофункциональный, но при этом очень яркий EDC‑фонарик. Зачастую фонари такого плана по факту оказываются бесполезными в повседневной жизни и в...