Симптомы
Пакетный скрипт (как правило, 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, любой сбой одновременно приводит к ошибке всей партии.
Исправление
Проверьте, использует ли ваш скрипт proxy
http или https (например, 127.0.0.1:7890), requests по умолчанию направляет запросы через этот proxy.Обойдите proxy (выберите один вариант)
- requests
- OpenAI SDK
- Переменная окружения
- ПО для proxy
requests.post(..., proxies={"http": None, "https": None}).Проверьте с небольшим пакетом запросов
http://api.apiyi.com:16888 — это официально предоставляемый plain-HTTP эндпоинт, который снижает задержку для задач генерации изображений (см. Как уменьшить задержку Image API?). Вы можете продолжать его использовать, если обходите proxy, как описано выше.Часто задаваемые вопросы
Взимается ли плата за эти неудачные запросы?
Взимается ли плата за эти неудачные запросы?
- Если прокси завершил работу до того, как запрос достиг APIYI, APIYI его не получил: плата не взимается и запись в журнале вызовов не создаётся.
- Если прокси разорвал соединение после отправки запроса, во время ожидания результата, APIYI, возможно, уже генерирует изображение и тарифицирует его как обычно, однако результат не поступает в ваш скрипт.
Почему запрос выполняется успешно после нескольких повторных попыток?
Почему запрос выполняется успешно после нескольких повторных попыток?
Может ли APIYI исправить это на стороне сервера?
Может ли APIYI исправить это на стороне сервера?
Я всё ещё получаю 502 после обхода прокси. Что делать?
Я всё ещё получаю 502 после обхода прокси. Что делать?
Server и Date и имеет тело HTML или JSON, это 502 на стороне платформы; см. Веб-сайт или API возвращает 502. Если это продолжает происходить, отправьте в поддержку время сбоя (с указанием часового пояса, например 14:30 (UTC+8)) и полный ответ.