如何从fastapi中的另一个API调用一个API?

问题描述

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

我想存储此响应内容而不返回它。

是的,如果我返回该函数,我会得到结果,但是当我打印它时,我找不到结果。 此外,如果我发出发布请求,则会收到错误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')))

请让我知道是否有更好的方法。

,

我遇到了同样的问题,我需要使用 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...