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将仅发送给请求目标。














暂无评论内容