FastAPI/uvicorn не работает при указании хоста

Я запускаю приложение FastAPI на Python, используя uvicorn на машине Windows. Он отлично работает, когда я

  1. Запустите следующий код на моем Mac или
  2. Когда я не указываю порт для uvicorn (удалите host параметр из вызова uvicorn.run)
  3. Когда я указываю порт 127.0.0.1, то есть хост, который он использует, когда я вообще не указываю хост.
from fastapi import FastAPI
import uvicorn

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}


if __name__ == '__main__':
    uvicorn.run(app, port=8080, host='0.0.0.0')

Когда я перехожу к 0.0.0.0:8080 в своем браузере, я получаю сообщение об ошибке "Этот сайт недоступен".

Я проверил свои текущие активные порты, чтобы убедиться, что у меня нет коллизии, используя netstat -ao |find /i "listening" и 0.0.0.0:8080 не используется.

Моя текущая конфигурация файла выглядит так:

working_directory
└── app
    ├── gunicorn_conf.py
    └── main.py

Мой gunicorn_conf.py очень прост и просто пытается установить хост и порт:

host = "0.0.0.0"
port = "8080"

Как я могу заставить это работать, если я укажу порт 0.0.0.0?

4 ответа

Решение

Когда я писал вышеупомянутый вопрос, я нашел решение и подумал, что поделюсь, если кто-то еще столкнется с этим. Чтобы заставить его работать, введите " http://localhost:8080/" в веб-браузер вместо " http://0.0.0.0:8080/", и он будет работать нормально. Это также работает, если вы попадаете в конечную точку через пакет запросов python и т. Д.

Запустите это в терминале uvicorn main:app --port 8086 --reload

0.0.0.0 технически не разрешен в качестве адреса назначения в IPv4, но может использоваться в качестве адреса источника. Реализации различаются, например, Linux рассматривает его аналогично .

При тестировании вашего веб-сервера, вероятно, лучше отправлять запросы на127.0.0.1илиlocalhostкак ты говоришь.

Пожалуйста, как я могу сделать хост uvicorn общедоступным, чтобы я мог отправить URL-адрес api тому, кто может его протестировать.

Другие вопросы по тегам