如何在 fastapi 中从另一个 api 调用一个 api?

How to call an api from another api in fastapi?

我能够从另一个 API 获得响应,但无法将其存储在某个地方(在 return 响应之前的文件或其他内容中) response=RedirectResponse(url="/apiname/")(我想使用 header 和 body 访问 post 请求)

I want to store this response content without returning it.

是的,如果我 return 该函数我会得到结果,但是当我打印它时我找不到结果。 另外,如果我给出 post 请求,那么我会收到错误 Entity not found.

我阅读了 starlette 和 fastapi 文档,但无法找到解决方法。回调也没有帮助。

如果不直接使用 fastapi/starlette 返回,我并没有完全了解存储响应的方法。但我找到了完成此任务的解决方法。

  • 对于试图实现同样事情的人,请考虑这个 方式。
import requests

def test_function(request: Request, path_parameter: path_param):

    request_example = {"test" : "in"}
    host = request.client.host
    data_source_id = path_parameter.id

    get_test_url= f"http://{host}/test/{id}/"
    get_inp_url = f"http://{host}/test/{id}/inp"

    test_get_response = requests.get(get_test_url)
    inp_post_response = requests.post(get_inp_url , json=request_example)
    if inp_post_response .status_code == 200:
        print(json.loads(test_get_response.content.decode('utf-8')))

Please let me know if there are better approaches.

我有同样的问题&我需要用async方式调用第三方API 所以我尝试了很多方法 & 我用 requests-async library 来解决 它对我有用。

import http3

client = http3.AsyncClient()

async def call_api(url: str):

    r = await client.get(url)
    return r.text

@app.get("/")
async def root():
    ...
    result_1 = await call_api('url_1')
    result_2 = await call_api('url_2')
    ...

httpx你也可以用 this video 他正在使用 httpx