aiohttp:如何从 requests.get 检索 aiohttp 服务器中的数据(正文)

问题描述 投票:0回答:4

您能就以下问题提出建议吗?

localhost:8900
上有 aiohttp 服务器正在运行

当我从 python 发出类似(使用 python2 模块请求)的请求时

requests.get("http://127.0.01:8900/api/bgp/show-route",
             data={'topo':"switzerland",
                   'pop':"zrh",
                   'prefix':"1.1.1.1/32"})

并且aiohttp服务器中定义了一条路由

app.router.add_route("GET", "/api/bgp/show-route", api_bgp_show_route)

处理方式如下

def api_bgp_show_route(request):
    pass

问题是:如何在服务器端检索请求的数据部分?意思是

{'topo':"switzerland", 'pop':"zrh", 'prefix':"1.1.1.1/32"}

python rest python-3.x aiohttp
4个回答
42
投票

ahh

data
部分是这样访问的

await request.json()

您可以在官方aiohttp文档中找到这个


9
投票

这取决于您想要数据的格式。

获取字符串:

request.text()

获取字节:

request.read()

获取 JSON 字典(注意,如果数据格式错误,会抛出 json.decoder.JSONDecodeError!):

request.json()

6
投票

您可以使用访问 POST 请求正文数据

if request.body_exists:
        print(await request.read())

0
投票

如果您想使用 aiohttp,您的代码中缺少两个主要组件。首先,您需要使用

session = aiohttp.ClientSession()
创建一个 aiohttp 会话。其次,您需要在异步函数中使用
session.get()
并等待该函数。 您可以用您的函数调用它,如下所示:
response = await session.get(url)
在声明它时,将其放入以 async 开头、def 之前的函数中,例如如下:

async def test(url: str) -> None:
    session = aiohttp.ClientSession()
    
    response = await session.get(url)

最后使用 asyncio.run() 启动异步函数,如下所示:

asyncio.run(test(url: str))

如果您只想打印结果,请使用

print(response)
。如果您希望将响应作为 Python 对象,您可以使用以下命令解析 json 的结果:
data = await response.json()

这是一个非常简洁的答案,如果您想要更详细的分步指南,我已经写了一篇关于如何使用 aiohttp 的文章:https://medium.com/@thomas.vidori/d9863b3ae7c2

© www.soinside.com 2019 - 2024. All rights reserved.