Ошибка 400 Bad Request через прокси
Сервер считает, что запрос составлен неправильно, и не обрабатывает его. Так может ответить и прокси, и сайт — искать причину нужно в разных местах.
Обновлено · Редакция Prokso
- Код 400 означает неправильно составленный запрос: его может отправить и прокси, и сайт
- Чаще всего протокол не соответствует порту: 823 для HTTP, 824 для SOCKS5
- Проверьте пару порт и протокол, затем скопируйте строку прокси из личного кабинета заново
Что означает ошибка
Код 400 означает, что сервер не может или не хочет обработать запрос из-за ошибки на стороне клиента: неверный синтаксис, нарушенная структура сообщения, недопустимые заголовки. Так его описывает стандарт HTTP (RFC 9110) и справочник MDN.
При работе через прокси этот код может прислать сам прокси. В таблице кодов Prokso 400 означает, что прокси получил запрос неправильного формата: чаще всего программа обращается не к тому порту или не по тому протоколу.
Если прокси принял запрос и передал его дальше, 400 возвращает уже сайт. Тогда прокси ни при чём: сайту не понравился сам запрос — адрес, заголовки, cookies или тело.
Причины
- Протокол не соответствует порту. Порт 823 принимает HTTP, порт 824 — SOCKS5. Если программа обращается по SOCKS5 к порту 823, прокси получает непонятные для себя данные.
- Строка прокси испорчена. Лишний пробел, кавычки, обрезанный пароль или неправильный порядок частей — программа формирует запрос, который прокси не может разобрать.
- Слишком большие заголовки или cookies. Серверы ограничивают размер заголовков. Например, nginx отвечает 400, когда отдельный заголовок не помещается в отведённый буфер.
- Неправильно закодированный адрес. Пробелы, кириллица или спецсимволы в URL без кодирования, удвоенные знаки «?» и «&».
- Тело не соответствует заголовкам. Content-Type говорит JSON, а отправляется форма; Content-Length не совпадает с реальным размером.
Как исправить
- Проверьте пару «порт — протокол»: 823 для HTTP, 824 для SOCKS5, порты 10000–20000 — фиксированный IP для обоих протоколов. Подробнее о протоколах — на странице SOCKS5-прокси.
- Скопируйте строку прокси из кабинета заново и при необходимости приведите её к нужному формату в конвертере формата прокси.
- Если ошибку показывает браузер на конкретном сайте, очистите cookies этого сайта и откройте страницу снова.
- В скрипте кодируйте параметры адреса штатными средствами библиотеки, а не склеивайте строку вручную.
- Сравните заголовки и тело с тем, чего ждёт сайт или его 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 ГБ
Регистрация за минуту, доступы сразу после оплаты.