requests proxy & SSL 證書設置

requests 的 proxy 設置

直接使用系統設置

發現 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

Proxies in Advanced Usageurl

SSL 證書設置

好比上一步設置的 HTTPS Proxy 是想用 Charles 來抓包的,想用 Charles 解析 HTTPS 的請求就必須把 Charles 放在中間,客戶端相信 Charles 簽發的證書並和 Charles 之間 HTTPS 通訊。Charles 再把本身當作一個客戶端去和服務器 HTTPS 通訊。code

這裏要作的就是讓 requests 來信任 Charles 生成的 CA。這個關鍵的一步 requests 卻不能讀取系統的設置了,有點傷心。那手動好了。ssl

相似上一步中的 proxies,session、request 中還有 verifycert 參數,前者默認爲 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')

參考:

相關文章
相關標籤/搜索