Client Quickstart
1、Make a Request(制作一个请求)
首先导入库
import aiohttp
import asyncio
然后,让我们尝试获取一个网页页面。例如,访问 http://httpbin.org/get,运行以下代码,可以获得访问的数据:
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://httpbin.org/get') as resp:
print(resp.status)
print(await resp.text())
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.run_forever()
现在,我们有了一个客户端时域称作session,有了一个客户端响应称作resp,我们可以从响应中得到我们想要的信息,ClientSession.get()协程的参数是这个HTTP url(即上面中的url)
为了使用HTTP的post请求,使用协程ClientSession.post():
session.post('http://httpbin.org/post', data=b'data')
其他的HTTP方法也是可以使用的:
session.put('http://httpbin.org/put', data=b'data')
session.delete('http://httpbin.org/delete')
session.head('http://httpbin.org/get')
session.options('http://httpbin.org/get')
session.patch('http://httpbin.org/patch', data=b'data')
注意:
请不要每个request都创建一个session,这是一个不好的习惯,应该一个session对应多个request。每一个session都包含一个连接,复用连接可以提高速度与效率。
一个session上下文管理器不是必须的,但是在下面这种情况下是需要的:
session = aiohttp.ClientSession()
async with session.get('...'):
# ...
await session.close()
2、Passing Parameters In URLs(在URLs中传递参数)
例如,如果你想传递key1=value1和key2=value2到httpbin.org/get,你可以使用一个字典通过以下代码实现:
params = {
'key1': 'value1', 'key2': 'value2'}
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://httpbin.org/get',params=params) as resp:
expect1 = 'http://httpbin.org/get?key2=value2&key1=value1'
if str(resp.url) == expect1:
print(1)
else:
print(0)
expect2 = 'http://httpbin.org/get?key1=value1&key2=value2'
if str(resp.url) == expect2:
print(1)
else:
print