一.简单使用和讲解
<code class="language-python">import <a href="https://www.gaodaima.com/tag/aiohttp" title="查看更多关于aiohttp的文章" target="_blank">aiohttp</a> import <a href="https://www.gaodaima.com/tag/async" title="查看更多关于async的文章" target="_blank">async</a>io async def fetch(<a href="https://www.gaodaima.com/tag/client" title="查看更多关于client的文章" target="_blank">client</a>): async with client.get("http://httpbin.org/get") as resp: assert resp.status == 200 return await resp.text() async def main(): async with aiohttp.ClientSession() as client: html = await fetch(client) print(html) loop = asyncio.get_event_loop() #返回一个事件循环对象,是asyncio.Baseeventloop的实例 for i in range(30): task = loop.create_task(main()) #添加任务 loop.run_until_complete(main()) #运行直至main()运行完 </code>
www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码网搞代码
二.asyncio模块(事件相关)
Column | Column |
---|---|
Asyncio.get_event_loop() | 返回一个事件循环对象,是asyncio.Baseeventloop的实例 |
Abstracteventloop.stop() | 停止运行事件循环 |
Abstracteventloop.run_forever() | 一直运行直到stop() |
Abstracteventloop.run_until_complete(func()) | 运行直至func对象运行完 |
Abstracteventloop.close() | 关闭事件循环 |
Abstracteventloop.is_running() | 返回事件循环的是否运行 |
Abstracteventloop.create_task(func()) | 添加事件 |
三.asyncio模块回调(部分代码)
<code class="language-python">loop = asyncio.get_event_loop() #返回一个事件循环对象,是asyncio.Baseeventloop的实例 task = loop.create_task(main()) task.add_done_callback(callback) #上面的mian方法的返回值为下面callback方法名所用方法的入参 </code>
四.aiohttp请求相关
1.发起请求
<code class="language-python">import aiohttp import asyncio async def request_get(url): async with aiohttp.ClientSession() as client: # 创建 async with client.get(url) as resp: assert resp.status == 200 # 如果状态码是200才往下走,不然抛异常 print( await resp.text()) loop = asyncio.get_event_loop() loop.run_until_complete(request_get("http://httpbin.org/get")) </code>
2.添加请求头,params,cookies,代理
<code class="language-python">和reuqest模块类似直接加就可以了 #设置代理 session.get("http://python.org",proxy="http://some.proxy.com") </code>
3.自定义域名解析地址
<code class="language-python">#我们可以指定域名服务器的 IP 对我们提供的get或post的url进行解析 from aiohttp.resolver import AsyncResolver resolver = AsyncResolver(nameservers=["8.8.8.8", "8.8.4.4"]) conn = aiohttp.TCPConnector(resolver=resolver) </code>
4.控制同时连接的数量(连接池)
<code class="language-python">async def func1(): cookies = {"my_cookie": "my_value"} conn = aiohttp.TCPConnector(limit=2) #默认100,0表示无限 async with aiohttp.ClientSession(cookies=cookies,connector=conn) as session: pass </code>
五.aiohttp响应相关
1.获取网站的响应状态码
<code class="language-python">resp.status </code>
2.获取网站的请求头
<code class="language-python">resp.headers 来查看响应头,得到的值类型是一个dict resp.raw_headers 查看原生的响应头,字节类型 resp.history 查看重定向的响应头 </code>
3.获取网站的响应内容
<code class="language-python">使用text()方法 使用json()方法 json格式 使用read()方法,不进行编码,为字节形式 r.content.read(10) 获取二进制流前10 注意:text(),read()方法是把整个响应体读入内存,如果你是获取大量的数据,请考虑使用”字节流“(StreamResponse) </code>