發現 requests 會直接使用 macOS 系統的 proxy 設置。可是不少時候都不想這麼作,因此會經過代碼來配置。python
單次請求的設置:git
import requests proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'} requests.get('http://example.org', proxies=proxies)
使用 session 時候的持久設置:github
import requests s = requests.Session() s.proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'} requests.get('http://example.org')
須要注意的是,單次的 requests 請求的設置能夠覆蓋 session 中的設置,參考 requests.sessions 的源碼。服務器
參考:session
好比上一步設置的 HTTPS Proxy 是想用 Charles 來抓包的,想用 Charles 解析 HTTPS 的請求就必須把 Charles 放在中間,客戶端相信 Charles 簽發的證書並和 Charles 之間 HTTPS 通訊。Charles 再把本身當作一個客戶端去和服務器 HTTPS 通訊。code
這裏要作的就是讓 requests 來信任 Charles 生成的 CA。這個關鍵的一步 requests 卻不能讀取系統的設置了,有點傷心。那手動好了。ssl
相似上一步中的 proxies
,session、request 中還有 verify
和 cert
參數,前者默認爲 True
表示須要驗證服務器的 SSL 證書,手動設置成 False
可行可是會不停的報 Warning,Warning 不太好關掉。get
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')
參考: