【发布时间】:2021-01-27 20:11:54
【问题描述】:
我目前正在使用 Google Cloud Run 部署 API,尽管一切正常,但我现在很难理解我遇到的错误。
我使用FastAPI在python3上创建了API,Location模型基于Pydantic's BaseModel。
为了说明这一点,我定义了如下测试路线:
class Location(BaseModel):
lat: float
lng: float
@router.get('/test_404')
async def test_404(origin: Location = Body(...),
destination: Location = Body(...)):
print(origin)
print(destination)
return {'res': 'ok'}
该路由应该在请求的正文中采用两个参数:来源和目的地,它可以,但仅在我将其部署在本地时。 这个:
url_local = "http://0.0.0.0:8080/test_404"
data = {
'origin': {'lat': 104, 'lng': 342},
'destination': {'lat': 104, 'lng': 342}
}
resp = requests.get(url_local, json = data)
print(resp.text)
输出:
'{"res":"ok"}'
当我在 Cloud Run 上部署相同的服务时会出现问题。我所有其他路线都可以正常工作,但这是我将上面的代码与容器 url 一起使用时得到的输出:
<!DOCTYPE html>\n
<html lang=en>
<meta charset=utf-8>
\n
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
\n <title>Error 400 (Bad Request)!!1</title>\n
\n <a href=//www.google.com/><span id=logo aria-label=Google></span></a>\n
<p><b>400.</b>
<ins>That’s an error.</ins>
\n
<p>Your client has issued a malformed or illegal request.
<ins>That’s all we know.</ins>
这是由 google 触发的错误,我的请求无法到达服务(无日志条目)
我在网上搜索过,但没有找到导致此错误的原因。我错过了什么?
非常感谢
【问题讨论】:
标签: python-3.x google-cloud-platform google-cloud-run fastapi pydantic