Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@dvmn-tasks
Last active November 28, 2018 09:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dvmn-tasks/4f1f842b4c4d642f4527e1a5267a5452 to your computer and use it in GitHub Desktop.
Save dvmn-tasks/4f1f842b4c4d642f4527e1a5267a5452 to your computer and use it in GitHub Desktop.
Распрстранённые ошибки при работе с HTTP и пояснения к ним

HTTP статусы

Статус ответа приходит от сервера вместе с ответом. Например, вы наверняка уже знакомы с кодом 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()

403, что делать?

Этот код расшифровывется как «Forbidden», т.е. «Доступ запрещён». Скорее всего вы забыли авторизоваться: приложить токен или логин и пароль к запросу. А может у вас и правда нет прав на действие, как, например, если я попытаюсь прочитать переписку другого пользователя, я должен получить 403.

Как авторизовываться можно найти в слайдах.

406, Not Acceptable

Часто такое случается, когда сервис ожидает ответ в формате JSON, а вы ему отправлете строку. Проверьте формат ожидаемых значений в документации сервиса, с которым работаете.

Как передать JSON можно найти в слайдах.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment