Симптомы
Пакетный скрипт (как правило, Windows + Pythonrequests) периодически получает ответы 502, которые выводятся примерно так:
- Тело ответа пустое, а единственные заголовки —
ConnectionиContent-Length - Веб-консоль продолжает работать всё это время
- Неудачные запросы вообще не отображаются в ваших журналах вызовов
- Скрипт повторяет попытки при 502, часто несколько раз подряд завершаясь неудачей, прежде чем одна попытка станет успешной, при этом задержка между попытками каждый раз увеличивается
Краткий ответ
requests установите session.trust_env = False. Другие варианты описаны ниже.Как определить, ваш ли это случай
Каждый уровень APIYI возвращает ответы с распознаваемыми признаками, и ни один из них не соответствует указанному выше пустому 502:Server, нет заголовка Date и пустое тело, он почти наверняка получен от прокси-программы, а не от APIYI.
Почему подключается proxy
- Python
requestsавтоматически использует системный proxy. В Windows он считывает настройки системного proxy из реестра. Как только Clash, v2rayN или похожий инструмент включает «системный proxy», ваш скрипт незаметно направляет трафик через него, хотя в коде это никак не видно. - proxy самостоятельно пересылает plain-HTTP-запросы. При использовании plain-HTTP-адреса, такого как
http://api.apiyi.com:16888, proxy не просто открывает прозрачный туннель, а повторно отправляет запрос от вашего имени. Когда узел proxy зависает, переключается или превышает время ожидания, proxy возвращает вашему скрипту пустой ответ 502. - Большие тела запросов и высокая параллельность усугубляют проблему. Редактирование изображения загружает несколько MB данных изображения, а одна генерация занимает от 45 до 70 секунд. Когда десятки параллельных запросов используют один узел proxy, любой сбой одновременно приводит к ошибке всей партии.
Решение
Проверьте, использует ли ваш скрипт прокси
http или https (например, 127.0.0.1:7890), requests по умолчанию направляет трафик через этот прокси.Обход прокси (выберите один вариант)
- requests
- OpenAI SDK
- Переменная окружения
- Прокси-клиент
requests.post(..., proxies={"http": None, "https": None}).Проверка на небольшой партии
http://api.apiyi.com:16888 — это официально предоставляемый резервный эндпоинт plain-HTTP, и вы можете продолжать использовать его после настройки обхода прокси, как описано выше. Однако он не быстрее https, поэтому https://api.apiyi.com остается рекомендацией по умолчанию. См. Является ли http тем же самым, что и HTTP/1.1?Часто задаваемые вопросы
Взимается ли плата за эти неудачные запросы?
Взимается ли плата за эти неудачные запросы?
- Если прокси завершил работу до того, как запрос достиг APIYI, APIYI его не получил: плата не взимается и запись в журнале вызовов не создаётся.
- Если прокси разорвал соединение после отправки запроса, во время ожидания результата, APIYI, возможно, уже генерирует изображение и тарифицирует его как обычно, однако результат не поступает в ваш скрипт.
Почему запрос выполняется успешно после нескольких повторных попыток?
Почему запрос выполняется успешно после нескольких повторных попыток?
Может ли APIYI исправить это на стороне сервера?
Может ли APIYI исправить это на стороне сервера?
Я всё ещё получаю 502 после обхода прокси. Что делать?
Я всё ещё получаю 502 после обхода прокси. Что делать?
Server и Date и имеет тело HTML или JSON, это 502 на стороне платформы; см. Веб-сайт или API возвращает 502. Если это продолжает происходить, отправьте в поддержку время сбоя (с указанием часового пояса, например 14:30 (UTC+8)) и полный ответ.