Всем привет! С вами Сорша!
В этом уроке мы разберем, что такое 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)
GET
C помощью GET, мы делаем запрос на то, чтобы получить какую-либо информацию, но здесь мы уже не отправляем тело запроса. Здесь мы передаем параметры в сам url адрес
Пример кода:
params = {"page": 3}
res = requests.get(url="https://site.com/main", params=params)
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
Видеоурок: