Статья написана в пользовательском блоге — редакция Партнеркина не вносит изменения в текст. Вся орфография, пунктуация и содержание сохранены Подробнее про пользовательские блоги и о том, как зарабатывать до 3 000 ₽ за статью 😎
22 августа 2023 0 2773

УРОК: Requests. Запросы POST/GET. Python. Теория.

Всем привет! С вами Сорша!
В этом уроке мы разберем, что такое http запросы  и как с ними работать.
На самом деле в них нет ничего сложного. Кажется, что это может быть сложным, но по факту проще простого.
Когда-то я помню, я как огня боялся этого слова "запросы", потом когда сел разобрался, все оказалось не так страшно:)
Я буду объяснять наглядно и в более упрощенном варианте, чтобы было доступно каждому.
Этот урок будет теоретическим. В следующих уроках, мы что и будет делать это — практиковаться.
Нам просто необходимо знать теорию, чтобы понимать в дальнейшем откуда будут расти ноги . Поэтому, этот урок очень важный, и делаю на нем акцент. Без этого урока, вы не сможете въехать как работать с запросами.
Фактически, это ваша будущая методичка.

И так, начинаем.

Теория

Клиент, то есть вы, ваше устройство, и сервер ресурса, у них есть свой язык на котором они общаются и назывется этот язык — http запросы. С помощью этого языка клиент и сервер могут идентифицировать друг друга, друг другу отвечать, получать/передавать информацию да и в целом любое другое взаимодействие. 
В целом, это вся концепция http запросов.

 

Когда вы заходите на какой либо ресурс, вы не видите, как клиент-сервер обмениваются информацией, вы всегда видите только внешнюю оболочку. html разметку, css стили, ну и что нибудь на javascript какие нибудь анимации и т.д. А все остальные данные уже подгружаются благодаря http запросам.
Например, когда вы производите авторизацию или регистрацию на каком нибудь ресурсе, вы посылаете данные на сервер, такие как логин и пароль, сервер их принимает, обрабатывает у себя их на сервере и возвращает вам ответ, что операция успешно выполнена или же не выполнена.

Давайте теперь разберем виды запросов их всего 5. Но мы будем разбирать только 2 POST и GET.
Post и Get отличаются следующим

POST

С помощью POST мы отправляем на сервер какие-либо данные. Мы отправляем тело запроса, другими словами — body.
POST всегда отправляется с телом запроса. Тело так же может быть пустым. Но еще раз, если мы отправляем тело это будет POST запрос.
Пример кода:

data = {"login": "Sorsha", "password": "12345Qwerty!"}

res = requests.post(url='https://site.com/authorization/', data=data)

  • data — это наше тело. Тип данных словарь.
  • res — сюда мы вернем ответ нашего запроса.
  • requests.post  —  у requests мы вызываем метод post 
  • Далее передаем аргументы в наш метод
  • url — запрашиваемый URL с которым мы будем взаимодействовать
  • data — наше тело запроса. 

GET

C помощью GET, мы делаем запрос на то, чтобы получить какую-либо информацию, но здесь мы уже не отправляем тело запроса. Здесь мы передаем параметры в сам url адрес
Пример кода:

params = {"page": 3}

res = requests.get(url="https://site.com/main", params=params)

  • params — параметры которые будем передавать в URL. Тип данных — словарь.
  • res — сюда мы вернем ответ нашего запроса.
  • requests.get  —  у requests мы вызываем метод get 
  • url — запрашиваемый URL с которым мы будем взаимодействовать
  • params — параметры , которые передаем для URL

URL будет отправлен на сервер в таком виде: https://site.com/main?page=3
Параметры могут быть не обязательными. Это опционально. 

То есть мы не отправляем никаких данных на сервер. Мы указываем то, что мы хотим получить информацию с URL https://site.com/main, и конкретизируем, что хотим получить данные с 3 страницы этого сайта и по итогу, если мы сделали все верно, то ресурс нам вернет данные этой страницы или иную информацию.

Для закрепления

POST  запрос, это когда мы отправляем какие либо данные на сервер, у нас есть тело запроса, что мы хотим передать серверу.
GET  запрос, это когда мы хотим получить какие либо данные от сервера, но уже без тела запроса. И у нас есть опциональные параметры, которые передаются через URL.

 

Headers

Помимо методов POST и GET в запросах существует еще очень важная часть это headers, а то есть заголовки.

В заголовках передается очень важная информация , с помощью которых клиент и сервер понимают как друг с другом общаться и как вообще взаимодействовать друг с другом. 
Например: 
1) Какой тип контента мы будем получать или передавать — Content-Type
2) Юзер-Агент — Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
3) Куки или токены авторизации
4) Куда посылается запрос — Host
В целом , это одни из самых важных, заголовков, которые используются в целом повсеместно. Как минимум они наиболее частовстречаемые 

headers = {

"Accept": "*/*",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",

"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",

"Accept-Encoding": "gzip"

}

res = requests.get(url="https://site.com/main", headers=headers)

Все остальные заголовки, будут уже разными от ресурса к ресурсу.
Вот например заголовки Instagram на скриншоте, можете с ними ознакомиться.
В целом это яркое представление о заголовках. Тут есть все что нужно.

 

Так же важно понимать, что не все заголовки являются обязательными. Некоторые заголовки можно исключать, но это уже вопросов тестов и постепенное исключение каждого заголовка до тех пор, пока сервер не перестанет корректно воспринимать наш запрос.

Статусы ответов. Коды ответов.

Статусов достаточно много, но я бы выделил только несколько, с которыми за все время мне пришлось столкнуться.

200 — Сервер принял запрос. Ответ 200 говорит от том, что все Окей. Вы правильно составили запрос, и правильно передали нужные заголовки, то есть никаких конфликтов нету и сервер полностью доволен вашим запросом.

400 — Значит в теле запроса ошибка. Скорее синтаксическая и сервер не может прочитать ваше тело. в 99% случаев это именно так.

401 — Отказ в доступе. Необходима авторизация.

403 — Отказ в доступе. Спектр этой проблемы очень широкий. От бана от IP адреса, до того что небходима авторизация. Поэтому 403 уникален для каждой ситуации.

404 — URL не найден. Тут думаю все ясно как день.

405 — Сервер принимает по определенному URL например POST запрос, а вы ему пытаетесь отправить GET. Он будет возвращать именно этот статус. Тут нужно быть внимательней.

В целом я могу сослаться эту статью, оставлю её под видео, чтобы у вас было больше понимания о состоянии ответов, их коды и что каждый обозначает и за что отвечает.
https://developer.mozilla.org/ru/docs/Web/HTTP/Status

Итог

Мне кажется все достаточно просто. В этом правда нет ничего сложного. Но опять же, справедливости ради, я объясняю на максимально простых и базовых пониманиях. В реалях, вы столкнетесь с куда более сложными запросами POST GET, с более сложными headers. Но перед всеми сложными запросами, вам нужно знать самое простецкое. Как это вообще работает.
На этом я думаю все , теория окончена, в следующих уроках уже будем практиковаться! А этот урок был максимально теоретическим!

Подписывайся на мой канал в телеграме! Заходи в навигацию, там найдешь много интересных уроков и не только! :)

Telegram: https://t.me/sorsha_channel 

 

Видеоурок:

 

Как вам статья?
#новичкам #python #запросы #post/get

Топовая партнерка 1xSlots