Найти в Дзене
Записки сисадмина

Python. requests. Отправляем HTTP запросы.

Наконец пришло тепло и солнце, рабочее настроение куда-то улетучилось. Но пока мы все не ушли на майские праздники, нужно затронуть одну из самых часто встречаемых тем: http запросы. Рано, или поздно, каждый сталкивается с тем, что ему нужно обратиться к какому-либо API за данными. Не будем же мы постоянно скачивать все вручную, если это можно автоматизировать. Если вкратце и простыми словами про самые популярные запросы, с которыми мы обращаемся к серверу: GET - «Вот тебе вводные данные, отдай мне ответ». (Аналог SQL - Select) POST - «Вот тебе данные, которые ты должен записать себе». (Аналог SQL - Insert) PUT - «Вот тебе данные, найди их у себя и измени на то, что я прислал». (Аналог SQL - Update) Для отправки запросов мы будем использовать библиотеку requests. Для каждого типа запроса уже подготовлены методы - requests.get(), requests.post(), requests.put() и т.д. Get запросы отправляются тогда, когда нужно просто получить ответ от web сервера. Аналог SQL - Select запрос. Код отве
Оглавление

Наконец пришло тепло и солнце, рабочее настроение куда-то улетучилось. Но пока мы все не ушли на майские праздники, нужно затронуть одну из самых часто встречаемых тем: http запросы.

Рано, или поздно, каждый сталкивается с тем, что ему нужно обратиться к какому-либо API за данными. Не будем же мы постоянно скачивать все вручную, если это можно автоматизировать.

Если вкратце и простыми словами про самые популярные запросы, с которыми мы обращаемся к серверу:

GET - «Вот тебе вводные данные, отдай мне ответ». (Аналог SQL - Select)

POST - «Вот тебе данные, которые ты должен записать себе». (Аналог SQL - Insert)

PUT - «Вот тебе данные, найди их у себя и измени на то, что я прислал». (Аналог SQL - Update)

Для отправки запросов мы будем использовать библиотеку requests.

Для каждого типа запроса уже подготовлены методы - requests.get(), requests.post(), requests.put() и т.д.

  • Если мы копнем чуть вглубь, увидим, что любой метод (будь то get, post, put, или delete), обращается к функции request:
  • Сама функция request обязательно принимает в себя метод (get, post и т.д.), url, к которому нужно обратиться и набор других именованных параметров (например, заголовки, куки и т.д.):
-2
  • Сама же функция request создаст сессию и выдаст нам в ответ объект requests.Response:
-3

Давайте для начала разберемся с GET запросами.

Get запросы отправляются тогда, когда нужно просто получить ответ от web сервера. Аналог SQL - Select запрос.

-4
  • В ответ мы получим объект Response, а на вывод - текст заголовка с кодом ответа:
-5
  • Обычно, при http запросах, нас интересует две переменных: http код ответа и сам ответ.

Код ответа мы получим из директивы status_code.

Ответ будет храниться в директиве content (в бинарном формате), либо в директиве text.

-6
-7
  • response.text мы уже можем конвертировать из строки в json объект и работать с ним.

Post и Put запросы.

Если просто описывать разницу между post и put - post используется, когда нужно добавить новую запись, а put - когда нужно изменить уже существующую. На этом особо задерживаться не будем.

В отличии от Get запроса, в post и put мы обязаны передать какие-то данные. Для PUT - это обязательно data, для POST - на выбор, либо data, либо json.

В чем разница?

В data мы можем передать словарь, список кортежей, байты, или даже файл. Но чаще всего в запросе передается json.

  • Если нам нужно передать json в data:

В заголовке обязательно указываем 'Content-Type': 'application/json' и обязательно конвертируем словарь в строку.

-8
  • Можно передать json напрямую:
-9

В данном случае нам не нужно указывать web серверу в заголовке, что мы отправляем ему json объект.

Дополнительные параметры

  • Если content_type и user agent передаются в заголовке запроса (headers), то cookies определяются отдельно.

Так же, как и headers, cookies нужно передавать в виде словаря:

-10
  • Если же сайт требует авторизации, нам нужно передать логин и пароль в поле auth. В директиву auth необходимо передавать кортеж (tuple):
-11

Данная запись будет эквивалентна записи https://user:password@httpbin.org/status/200