requests 的 proxy 设置
直接使用系统设置
发现 requests 会直接使用 macOS 系统的 proxy 设置。但是很多时候都不想这么做,所以会通过代码来配置。
程序中设置
单次请求的设置:
import requests
proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
requests.get('http://example.org', proxies=proxies)
使用 session 时候的持久设置:
import requests
s = requests.Session()
s.proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
requests.get('http://example.org')
需要注意的是,单次的 requests 请求的设置可以覆盖 session 中的设置,参考 requests.sessions 的源码。
参考:
SSL 证书设置
比如上一步设置的 HTTPS Proxy 是想用 Charles 来抓包的,想用 Charles 解析 HTTPS 的请求就必须把 Charles 放在中间,客户端相信 Charles 签发的证书并和 Charles 之间 HTTPS 通信。Charles 再把自己当做一个客户端去和服务器 HTTPS 通信。
这里要做的就是让 requests 来信任 Charles 生成的 CA。这个关键的一步 requests 却不能读取系统的设置了,有点伤心。那手动好了。
类似上一步中的 proxies
,session、request 中还有 verify
和 cert
参数,前者默认为 True
表示需要验证服务器的 SSL 证书,手动设置成 False
可行但是会不停的报 Warning,Warning 不太好关掉。
verify
可以设置成证书的地址,发现证书使用文本格式的 PEM 是可用的。
实例如下:
import requests
proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
requests.get('http://example.org', proxies=proxies, verify='/path-to/charles-ssl-proxying-certificate.pem')
import requests
s = requests.Session()
s.proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
s.verify='/path-to/charles-ssl-proxying-certificate.pem'
requests.get('http://example.org')
参考:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。