python requests 设置 proxy 和 SSL 证书

例子

直接系统代理

requests 会直接使用 macOS 系统的 proxy 设置。

设置 proxy

import requests
proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
requests.get('http://example.org', proxies=proxies)
import requests
s = requests.Session()
s.proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
requests.get('http://example.org')

设置 SSL 证书

使用文本格式的 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')

特性

代码的配置可以覆盖系统的配置,单次的 requests 请求的设置可以覆盖 session 中的设置,参考 requests.sessions 的源码

参考

实验

SSL 证书设置

比如上一步设置的 HTTPS Proxy 是想用 Charles 来抓包的,想用 Charles 解析 HTTPS 的请求就必须把 Charles 放在中间,客户端相信 Charles 签发的证书并和 Charles 之间 HTTPS 通信。Charles 再把自己当做一个客户端去和服务器 HTTPS 通信。

这里要做的就是让 requests 来信任 Charles 生成的 CA。这个关键的一步 requests 却不能读取系统的设置了,有点伤心。那手动好了。

类似上一步中的 proxies,session、request 中还有 verifycert 参数,前者默认为 True 表示需要验证服务器的 SSL 证书,手动设置成 False 可行但是会不停的报 Warning,Warning 不太好关掉。

verify 可以设置成证书的地址,发现证书使用文本格式的 PEM 是可用的。

posted @ 2017-06-29 21:39  常伟佳  阅读(16632)  评论(3编辑  收藏  举报