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

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

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


Библиотека requests
  • Библиотека aiohttp
  • Итог
  • Библиотека 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. Выбор за тобой))