CURLOPT_HTTPPROXYTUNNEL
啟用 HTTP 代理通道,針對(duì) HTTP 代理服務(wù)器。
在未啟用時(shí)
Curl 將 method/header/body 等 Request 請(qǐng)求愿意發(fā)送給代理服務(wù)器,就像直接請(qǐng)求目標(biāo)服務(wù)器一樣 -> 代理服務(wù)器接收 Request 完畢后,原樣請(qǐng)求目標(biāo)服務(wù)器獲得 Response header/body -> 原樣返回給 Curl
啟用后
Curl 使用 Connect method 連接到代理服務(wù)器并告知目標(biāo)服務(wù)器 -> 代理服務(wù)器打開一個(gè)連接到目標(biāo)服務(wù)器的TCP 通道 -> Curl 通過(guò)代理服務(wù)器的 TCP 通道使用協(xié)議發(fā)送請(qǐng)求并接收請(qǐng)求。
可以看到,還是有很大區(qū)別的,啟用代理通道,可以通過(guò) HTTP 代理服務(wù)器發(fā)送 FTP 、SSH 等以 TCP 為基礎(chǔ)的協(xié)議,考慮到 Curl 一般用來(lái)處理 HTTP 請(qǐng)求,一般不開啟此選項(xiàng)。
CURLOPT_PROXY
代理服務(wù)器地址,默認(rèn)協(xié)議為 HTTP,端口 1080;若未完整設(shè)置,會(huì)自動(dòng)補(bǔ)全,如:
-
127.0.1.1(僅設(shè)置地址,相當(dāng)于http://127.0.0.1:1080) -
127.0.1.1:8118(地址+端口,相當(dāng)于http://127.0.0.1:8118) -
http://127.0.1.1(協(xié)議+地址,相當(dāng)于http://127.0.0.1:1080) -
socks5://127.0.1.1(協(xié)議+地址,相當(dāng)于socks5://127.0.0.1:1080) -
socks5://127.0.1.1:8118(完整設(shè)置)
CURLOPT_PROXYTYPE
若在代理地址中未設(shè)置 “協(xié)議”,可通過(guò)該選項(xiàng)設(shè)置。
CURLPROXY_HTTP (默認(rèn)值) CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、 CURLPROXY_SOCKS4A 或 CURLPROXY_SOCKS5_HOSTNAME
CURLOPT_PROXYPORT
若在代理地址中未設(shè)置 “端口”,可通過(guò)該選項(xiàng)設(shè)置。
比如:
CURLOPT_PROXY=127.0.0.1 + CURLOPT_PROXYTYPE=CURLPROXY_SOCKS5 + CURLOPT_PROXYPORT=8118 = socks5://127.0.0.1:8118
CURLOPT_PROXYAUTH 、CURLOPT_PROXYUSERPWD
代理服務(wù)器認(rèn)證設(shè)置,通過(guò)該設(shè)置,會(huì)發(fā)送 Proxy-Authorization 頭部報(bào)文給代理服務(wù)器。
-
CURLOPT_PROXYAUTH支持:CURLAUTH_BASIC和CURLAUTH_NTLM -
CURLOPT_PROXYUSERPWD格式:[username]:[password]
如果代理服務(wù)不是通過(guò) BASIC 或 NTLM 類型的 Authorization 驗(yàn)證,或者還需要其他頭部信息,就需要自定義了。
相關(guān)配置:CURLOPT_HTTPHEADER、CURLOPT_PROXYHEADER 、CURLOPT_HEADEROPT
CURLOPT_HTTPHEADER
發(fā)送給請(qǐng)求目標(biāo)的頭部信息,數(shù)組形式,如 ['Content-Type: text/plain', 'Content-Length: 100']
CURLOPT_PROXYHEADER
發(fā)送給代理服務(wù)器的頭部信息,數(shù)組形式,如 ['Proxy-Foo: foo', 'Proxy-Bar: bar',]
CURLOPT_HEADEROPT
實(shí)際發(fā)送給代理服務(wù)器的頭部信息選項(xiàng):
CURLHEADER_UNIFIED: 設(shè)置為該值,將忽略CURLOPT_PROXYHEADER設(shè)置,而是發(fā)送CURLOPT_HTTPHEADER頭部給代理服務(wù)器;若設(shè)置了CURLOPT_PROXYUSERPWD,并未額外發(fā)送Proxy-Authorization給代理服務(wù)器(此首部不會(huì)發(fā)送給請(qǐng)求目標(biāo))CURLHEADER_SEPARATE:僅發(fā)送CURLOPT_PROXYHEADER給代理服務(wù)器,若未設(shè)置該項(xiàng),則不發(fā)送;CURLOPT_HTTPHEADER將僅發(fā)送給請(qǐng)求目標(biāo)。