您能就以下问题提出建议吗?
在
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"}
这取决于您想要数据的格式。
获取字符串:
request.text()
获取字节:
request.read()
获取 JSON 字典(注意,如果数据格式错误,会抛出 json.decoder.JSONDecodeError!):
request.json()
您可以使用访问 POST 请求正文数据
if request.body_exists:
print(await request.read())
如果您想使用 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