CURLOPT_HTTPPROXYTUNNEL
启用 HTTP 代理通道,针对 HTTP 代理服务器。
在未启用时
Curl 将 method/header/body 等 Request 请求愿意发送给代理服务器,就像直接请求目标服务器一样 -> 代理服务器接收 Request 完毕后,原样请求目标服务器获得 Response header/body -> 原样返回给 Curl
启用后
Curl 使用 Connect method 连接到代理服务器并告知目标服务器 -> 代理服务器打开一个连接到目标服务器的TCP 通道 -> Curl 通过代理服务器的 TCP 通道使用协议发送请求并接收请求。
可以看到,还是有很大区别的,启用代理通道,可以通过 HTTP 代理服务器发送 FTP 、SSH 等以 TCP 为基础的协议,考虑到 Curl 一般用来处理 HTTP 请求,一般不开启此选项。
CURLOPT_PROXY
代理服务器地址,默认协议为 HTTP,端口 1080;若未完整设置,会自动补全,如:
-
127.0.1.1
(仅设置地址,相当于http://127.0.0.1:1080
) -
127.0.1.1:8118
(地址+端口,相当于http://127.0.0.1:8118
) -
http://127.0.1.1
(协议+地址,相当于http://127.0.0.1:1080
) -
socks5://127.0.1.1
(协议+地址,相当于socks5://127.0.0.1:1080
) -
socks5://127.0.1.1:8118
(完整设置)
CURLOPT_PROXYTYPE
若在代理地址中未设置 “协议”,可通过该选项设置。
CURLPROXY_HTTP
(默认值) CURLPROXY_SOCKS4
、 CURLPROXY_SOCKS5
、 CURLPROXY_SOCKS4A
或 CURLPROXY_SOCKS5_HOSTNAME
CURLOPT_PROXYPORT
若在代理地址中未设置 “端口”,可通过该选项设置。
比如:
CURLOPT_PROXY=127.0.0.1
+ CURLOPT_PROXYTYPE=CURLPROXY_SOCKS5
+ CURLOPT_PROXYPORT=8118
= socks5://127.0.0.1:8118
CURLOPT_PROXYAUTH
、CURLOPT_PROXYUSERPWD
代理服务器认证设置,通过该设置,会发送 Proxy-Authorization
头部报文给代理服务器。
-
CURLOPT_PROXYAUTH
支持:CURLAUTH_BASIC
和CURLAUTH_NTLM
-
CURLOPT_PROXYUSERPWD
格式:[username]:[password]
如果代理服务不是通过 BASIC
或 NTLM
类型的 Authorization
验证,或者还需要其他头部信息,就需要自定义了。
相关配置:CURLOPT_HTTPHEADER
、CURLOPT_PROXYHEADER
、CURLOPT_HEADEROPT
CURLOPT_HTTPHEADER
发送给请求目标的头部信息,数组形式,如 ['Content-Type: text/plain', 'Content-Length: 100']
CURLOPT_PROXYHEADER
发送给代理服务器的头部信息,数组形式,如 ['Proxy-Foo: foo', 'Proxy-Bar: bar',]
CURLOPT_HEADEROPT
实际发送给代理服务器的头部信息选项:
-
CURLHEADER_UNIFIED
: 设置为该值,将忽略CURLOPT_PROXYHEADER
设置,而是发送CURLOPT_HTTPHEADER
头部给代理服务器;若设置了CURLOPT_PROXYUSERPWD
,并未额外发送Proxy-Authorization
给代理服务器(此首部不会发送给请求目标) -
CURLHEADER_SEPARATE
:仅发送CURLOPT_PROXYHEADER
给代理服务器,若未设置该项,则不发送;CURLOPT_HTTPHEADER
将仅发送给请求目标。
网友评论