网络请求
在 Python 众多的 HTTP 客户端中,最有名的莫过于requests
、aiohttp
和httpx
。
在不借助其他第三方库的情况下,requests
只能发送同步请求;aiohttp
只能发送异步请求;httpx
既能发送同步请求,又能发送异步请求。
那么怎么选择呢
- 只发同步请求用
requests
,但可配合多线程变异步。 - 只发异步请求用
aiohttp
,但可以配合await变同步。 httpx
可以发同步请求也可以异步,但是请求速度同步略差于requests
,异步略差于aiohttp
Asyncio 的强大。但是,任何一种方案都不是完美的,都存在一定的局限性,Asyncio 同样如此。
实际使用中,想用好 Asyncio,特别是发挥其强大的功能,很多情况下必须得有相应的 Python 库支持。
比如
requests 库并不兼容 Asyncio,而 aiohttp 库兼容。
requests
这里先说requests
安装依赖
1 | pip install requests |
响应
响应的类型
1 | #获取接口返回的字符串数据 |
获取请求响应的其他信息
1 | #获取状态码 |
请求
GET请求
get请求:
1 | res = requests.get(url,data=data,cookies=cookie,headers=header,verify=False,files=file) |
data可传可不传,data是字典格式。
如果url是https的话,加上verify=False。如果url是http的话,可不加。
示例1
1 | import requests |
示例2
1 | import requests |
POST请求
1 | url_post = "https://www.psvmc.cn/login.json" |
其他类型请求
1 | r = requests.put(url, data =dict_param) |
代理
跨域的时候可以考虑代理访问,不管是post请求还是get请求,只需要添加proxies即可。
客户端开发时不用考虑跨域问题,没有必要设置代理访问。
1 | proxies = { |
查看代理是否有效
和telnet作用一样
1 | import telnetlib |
异步请求
aiohttp 的代码与 httpx 异步模式的代码重合度90%,只不过把AsyncClient
换成了ClientSession
。
aiohttp
安装依赖
1 | pip install aiohttp |
示例
1 | import aiohttp |
报错
RuntimeError: Event loop is closed
把
1 | asyncio.run(main()) |
更改为
1 | loop = asyncio.get_event_loop() |
异步请求
1 | import asyncio |
httpx
详情:https://www.psvmc.cn/article/2021-11-26-python-httpx.html
JSON
字符串转对象
1 | import json |
对象转字符串
1 | import json |
当 Python 转换为 JSON 时,Python 对象会被转换为 JSON(JavaScript)等效项:
Python | JSON |
---|---|
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |