Статус ответа приходит от сервера вместе с ответом. Например, вы наверняка уже знакомы с кодом 404 — он означает "Страница не найдена". Таких кодов очень много и стоит ориентироваться в них, чтобы не теряться и быстро находить ошибки.
Код ответа всегда состоит из трёх цифр. По первой цифре можно понять к какому классу относится статус. Если код начинаетсяс цифры:
- 1 — информационный. Скорее всего с ним вы не столкнётесь ещё долго. Как пример приведём 101, «переключение протоколов».
- 2 — успешный. Его рассматривать не нужно, всё ведь прошло хорошо. Ответ 200 так и расшифровывется: «хорошо».
- 3 — перенаправление. Например, 308, «постоянное перенаправление» — запрашиваемый ресурс был окончательно перенесен на новый адрес.
- 4 — ошиба клиента. Например, 404 — «страница не найдена». То есть клиент попросил у сервера страницу, которой нет. В такой ситуации ошибся явно клиент, а не сервер.
- 5 — ошибка сервера. Например, 503 — «сервис недоступен». В такой ситуации проблема со стороны сервера, клиент не виноват, это разработчики сайта чего-то поломали.
Для начала стоит узнать статус ответа:
Если вы пользуетесь requests
:
>>> response = requests.get('https://dvmn.org')
>>> response.status_code
200
Если вы используете urllib
:
>>> response = urllib.urlopen('https://dvmn.org')
>>> response.getcode()
200
Также полезно посмотреть текст присланного ответа, requests
:
response.text
urllib
:
response.read()
Этот код расшифровывется как «Forbidden», т.е. «Доступ запрещён». Скорее всего вы забыли авторизоваться: приложить токен или логин и пароль к запросу. А может у вас и правда нет прав на действие, как, например, если я попытаюсь прочитать переписку другого пользователя, я должен получить 403.
Как авторизовываться можно найти в слайдах.
Часто такое случается, когда сервис ожидает ответ в формате JSON, а вы ему отправлете строку. Проверьте формат ожидаемых значений в документации сервиса, с которым работаете.
Как передать JSON можно найти в слайдах.