无法使用 FastAPI 访问或打印任何请求数据

我有一个简单的 FastAPI 端点,我想在其中接收一个字符串值。在这种情况下,我尝试使用 JSON 正文,但基本上它不需要是 JSON。我真的只需要一个简单的字符串来将请求彼此分开。不幸的是,我无法使用 GET 方法访问任何请求参数。我也尝试了 POST 方法,但出现错误:

要求:

url = "http://127.0.0.1:5000/ping/"

payload=json.dumps({"key":"test"})
headers = {
"Content-Type": "application/json"
            }
response = requests.request("POST", url, headers=headers, json=payload)

print(response.text)

接口:

@app.get("/ping/{key}")
async def get_trigger(key: Request):

    key = key.json()
    test = json.loads(key)
    print(test)
    test2 = await key.json()
    print(key)
    print(test2)

    return 

我不能用 postput 打印任何东西:

@app.post("/ping/{key}")
async def get_trigger(key: Request):
...
   or

@app.put("/ping/{key}")
async def get_trigger(key: Request):

我收到 405 Method not allowed 错误。

我怎样才能解决这个问题?

stack overflow Can't access or print any request data with FastAPI
原文答案

答案:

作者头像

405 Method Not Allowed 状态码表示 "the server knows the request method, but the target resource **doesn't support this method**" 。例如,当您尝试将 POST 请求发送到 GET 路由(如您的第一个示例中所示)时,您会收到此错误。但是,这不是您的代码(在客户端和服务器端)的唯一问题。下面给出了一个示例,说明如何使用 Path parameters 实现您在问题中描述的内容。使用 Query parametersRequest Body 也可以达到同样的效果。请查看 Python requests documentation ,了解如何为每种情况指定参数/正文。我还强烈建议使用 FastAPI tutorial 在线 - 你会在那里找到你正在寻找的大部分答案。

app.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/ping/{ping_id}")
async def get_trigger(ping_id: str):
    return {"ping_id": ping_id}

test.py

import requests

url = 'http://127.0.0.1:8000/ping/test1'
resp = requests.get(url=url) 
print(resp.json())