参考:https://www.jianshu.com/p/20ca9daba85f
参考官网:https://docs.aiohttp.org/en/stable/
用于asyncio和Python的异步HTTP客户端/服务器
使用pip安装
aiohttp的自我介绍中就包含了客户端和服务器端,所以我们分部来看下客户端和服务器端的简单代码示例。
use_aiohttp.py
运行结果如下
这个代码是不是很简单,一个函数用来发起请求,另外一个函数用来下载网页。
aiohttp_server.py
运行这个代码,然后访问http://127.0.0.1:8080就可以看到你的网站了,很 基础的一个网页,你可以在后面跟上你的名字。
访问根目录/
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iNxMTO0cjNwIDZxMzMiJDOxYzX1ATNwADM0AzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
带一个name访问 /liuym
运行这个代码,然后访问http://127.0.0.1:8080就可以看到你的网站了,很 基础的一个网页,你可以在后面跟上你的名字。
首先是学习客户端,也就是用来发送http请求的用法。首先看一段代码,会在代码中讲述需要注意的地方:
aiohttp_client.py
代码解释:
在网络请求中,一个请求就是一个会话,然后aiohttp使用的是ClientSession来关联会话,所以第一个重点,看一下ClientSession: 看源码
在源码中,这个类的注释是使用HTTP请求接口的一个类。然后上面的代码就是实例化一个ClientSession类,然后命名为session,然后用session去发送轻松。这里有一个坑,那就是<code>ClientSession.get()</code>协程的必需参数只能是<code>str</code>类和<code>yarl.URL</code>的实例。
当然这只是get请求,其他的post、put都是支持的:
有时候在发起网络请求的时候需要附加一些参数到url中,这一点也是支持的
运行输出
我们可以通过<code>params</code>参数来指定要传递的参数,
同时如果需要指定一个键对应多个值的参数,那么<code>MultiDict</code>就在这个时候起作用了。你可以传递两个元祖列表来作为参数:
输出如下
当然也可以之间传递一个str类型的数据到url中,但是这个时候需要注意的就是传递的字符串类型中最好是都可以被编码的。
编译后的路径大概是这样:
我们可以读取到服务器的响应状态和响应内容,这也是使用请求的一个很重要的部分。通过<code>status</code>来获取响应状态码,<code>text()</code>来获取到响应内容,当然也可以之计指明编码格式为你想要的编码格式:
对于网络请求,有时候是去访问一张图片,这种返回值是二进制的也是可以读取到的:
将<code>text()</code>方法换成<code>read()</code>方法就好。
ClientResponse(客户端响应)对象含有request_info(请求信息),主要是url和headers信息。 raise_for_status结构体上的信息会被复制给ClientResponseError实例。
有时候做请求的时候需要自定义header,主要是为了让服务器认为我们是一个浏览器。然后就需要我们自己来定义一个headers:
示例:
访问自己搭建的nginx服务器查看nginx日志可以看到,加headers和没有加headers的日志显示原始浏览器信息是不同的
发送你自己的cookies给服务器,你可以为ClientSession对象指定cookies参数:
输出cookies如下
有时候在写爬虫的时候需要使用到代理,所以aiohttp也是支持使用代理的,我们可以在发起请求的时候使用代理,只需要使用关键字<code>proxy</code>来指明就好,但是有一个很难受的地方就是它只支持<code>http</code>代理,不支持HTTPS代理。使用起来大概是这样:
使用起来大概是这样,然后代理记得改成自己的。