使用NordVPN作为代理实现PHP Curl访问HTTPS链接遇问题求助
问题:使用NordVPN代理通过PHP Curl访问亚马逊澳洲站失败
尝试用NordVPN作为代理服务器,通过PHP Curl访问https://www.amazon.com.au时始终失败,但关闭代理设置后访问正常。以下是已尝试的配置(注释为测试过的选项)及调试信息:
已尝试的PHP Curl配置
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,8); //curl_setopt($curl, CURLOPT_PROXY, 'au695.nordvpn.com:443'); // PROXY details with port //curl_setopt($curl, CURLOPT_PROXY, 'au695.nordvpn.com:1080'); // PROXY details with port curl_setopt($curl, CURLOPT_PROXY, 'au695.nordvpn.com:89'); // PROXY details with port curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyauth); // Use if proxy have username and password curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // If expected to call with specific PROXY type //curl_setopt($curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); //curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); //curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
Curl调试信息
* Trying 103.107.197.83:89... * Connected to au695.nordvpn.com (103.107.197.83) port 89 (#0) * allocate connect buffer * Establish HTTP proxy tunnel to www.amazon.com.au:443 * Proxy auth using Basic with user 'GFascTQQaDBxHrZULS4vnCgg' > CONNECT www.amazon.com.au:443 HTTP/1.1 Host: www.amazon.com.au:443 Proxy-Authorization: Basic R0Zhc2NUUVFhREJ4SHJaVUxTNHZuQ2dnOkxzV0g1eHQ0UTdoVnF0N2k5bkFZODlSUw== User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Proxy-Connection: Keep-Alive * Recv failure: Connection was reset * Received HTTP code 0 from proxy after CONNECT * CONNECT phase completed * Closing connection 0
解决方案
1. 匹配代理端口与类型
NordVPN的不同端口对应不同代理协议,必须对应设置CURLOPT_PROXYTYPE:
- 端口443:对应HTTPS代理,需设置
CURLOPT_PROXYTYPE => CURLPROXY_HTTPS - 端口1080:对应SOCKS5代理,需设置
CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5 - 端口89并非标准HTTP/SOCKS代理端口,大概率不支持HTTP隧道(CONNECT请求),建议放弃使用
2. 修正后的配置示例(以443端口为例)
$curl = curl_init('https://www.amazon.com.au'); // 延长连接超时时间,避免因网络延迟导致重置 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 15); // 使用HTTPS代理端口 curl_setopt($curl, CURLOPT_PROXY, 'au695.nordvpn.com:443'); // 指定代理类型为HTTPS curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS); // 代理凭据(格式:用户名:密码) curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyauth); // 生产环境建议开启SSL验证,避免安全风险 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // 启用返回内容捕获 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); // 捕获错误信息 if(curl_errno($curl)){ echo 'Curl错误: ' . curl_error($curl); } curl_close($curl);
3. 额外排查点
- 确认
$proxyauth的格式为用户名:密码,无拼写或格式错误 - 测试代理服务器是否可正常连通:用
telnet au695.nordvpn.com 443或curl -x https://au695.nordvpn.com:443 -U "用户名:密码" https://www.amazon.com.au在命令行验证 - 若使用SOCKS5代理(1080端口),需确保PHP Curl编译时包含SOCKS5支持
内容的提问来源于stack exchange,提问作者thydzik
相关产品推荐
相关产品推荐

