7

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

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

是的,如果我返回函数,我会得到结果,但是当我打印它时,我找不到结果。另外,如果我给出发布请求,那么我会收到错误实体未找到。

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

4

2 回答 2

6

如果不直接使用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')))

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

于 2020-08-20T07:59:33.220 回答
5

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

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你也可以使用 这个视频,他正在使用 httpx

于 2021-01-28T16:44:05.227 回答