Ошибка 400 Bad Request через прокси

Сервер считает, что запрос составлен неправильно, и не обрабатывает его. Так может ответить и прокси, и сайт — искать причину нужно в разных местах.

Обновлено · Редакция Prokso

Коротко
  • Код 400 означает неправильно составленный запрос: его может отправить и прокси, и сайт
  • Чаще всего протокол не соответствует порту: 823 для HTTP, 824 для SOCKS5
  • Проверьте пару порт и протокол, затем скопируйте строку прокси из личного кабинета заново

Что означает ошибка

Код 400 означает, что сервер не может или не хочет обработать запрос из-за ошибки на стороне клиента: неверный синтаксис, нарушенная структура сообщения, недопустимые заголовки. Так его описывает стандарт HTTP (RFC 9110) и справочник MDN.

При работе через прокси этот код может прислать сам прокси. В таблице кодов Prokso 400 означает, что прокси получил запрос неправильного формата: чаще всего программа обращается не к тому порту или не по тому протоколу.

Если прокси принял запрос и передал его дальше, 400 возвращает уже сайт. Тогда прокси ни при чём: сайту не понравился сам запрос — адрес, заголовки, cookies или тело.

Кто возвращает ошибку: 407 — прокси, 401 и 403 — сам сайтВаша программаПроксиgw.prokso.comСайт407 — отвечает прокси: логин, пароль или остаток трафика401 / 403 — отвечает сайт: вход на сайт или доступ
Кто возвращает ошибку: 407 — прокси, 401 и 403 — сам сайт

Причины

  • Протокол не соответствует порту. Порт 823 принимает HTTP, порт 824 — SOCKS5. Если программа обращается по SOCKS5 к порту 823, прокси получает непонятные для себя данные.
  • Строка прокси испорчена. Лишний пробел, кавычки, обрезанный пароль или неправильный порядок частей — программа формирует запрос, который прокси не может разобрать.
  • Слишком большие заголовки или cookies. Серверы ограничивают размер заголовков. Например, nginx отвечает 400, когда отдельный заголовок не помещается в отведённый буфер.
  • Неправильно закодированный адрес. Пробелы, кириллица или спецсимволы в URL без кодирования, удвоенные знаки «?» и «&».
  • Тело не соответствует заголовкам. Content-Type говорит JSON, а отправляется форма; Content-Length не совпадает с реальным размером.

Как исправить

  1. Проверьте пару «порт — протокол»: 823 для HTTP, 824 для SOCKS5, порты 10000–20000 — фиксированный IP для обоих протоколов. Подробнее о протоколах — на странице SOCKS5-прокси.
  2. Скопируйте строку прокси из кабинета заново и при необходимости приведите её к нужному формату в конвертере формата прокси.
  3. Если ошибку показывает браузер на конкретном сайте, очистите cookies этого сайта и откройте страницу снова.
  4. В скрипте кодируйте параметры адреса штатными средствами библиотеки, а не склеивайте строку вручную.
  5. Сравните заголовки и тело с тем, чего ждёт сайт или его API: тип содержимого, кодировка, обязательные поля.

Как проверить, что всё заработало

Проверьте строку в проверке прокси. Если там прокси работает, а 400 приходит только с одного сайта — причина в запросе к этому сайту, а не в подключении.

Диагностика за 2 минуты

Сначала вставьте строку в проверку прокси. Если там прокси работает, причина в программе или её настройках. Если нет — проверьте строку из терминала:

curl -v -x "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
  • Строка < HTTP/1.1 407 сразу после CONNECT — отвечает прокси. Название после кода, например NO_USER, подсказывает причину.
  • Прокси ответил на CONNECT кодом 200, а дальше пришёл другой код — прокси работает, этот ответ дал сайт.
  • Никакого ответа, только тайм-аут — соединение не дошло до прокси: проверьте хост, порт и сеть.

Вопросы и ответы

Как понять, кто ответил 400 — прокси или сайт?

Откройте через тот же прокси любую другую страницу, например <a href="/ru/tools/my-ip">«Мой IP»</a>. Если она открывается, прокси запросы принимает, и 400 выдаёт конкретный сайт.

Списывается ли трафик за запрос с ответом 400?

Трафик считается в обе стороны, поэтому списывается то, что реально прошло через прокси: ваш запрос и короткий ответ с ошибкой. Обычно это считанные килобайты.

Почему сайт открывается без прокси, а через прокси выдаёт 400?

Чаще всего программа по-разному формирует запрос в этих двух режимах: другие заголовки, другой протокол или порт. Сравните настройки и убедитесь, что протокол соответствует порту.

Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт