带代理的 PHP cURL(不是 SOCKS5)

nom*_*aam 2 php vpn proxy curl php-curl

我的工作代码通过 SOCKS5 协议使用我的 VPN (NordVPN) 凭据。

最近,他们放弃了对 SOCKS5 的支持,所以我必须使用他们的其他协议,但我无法让任何协议工作。

他们所有可用的协议都可以在这里看到

https://nordvpn.com/servers/tools/

- IKEv2/IPSec
- OpenVPN
- Wireguard
- HTTP Proxy (SSL)
Run Code Online (Sandbox Code Playgroud)

这是我的代码,尝试使用他们的“HTTP 代理(SSL)”协议

$cookie_file = tempnam("/tmp", "CURLCOOKIE");;

$ch = curl_init();

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // in seconds
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_PROXYPORT, "443");
curl_setopt($ch, CURLOPT_PROXY, "au643.nordvpn.com");

curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser . ":" . $proxyPass); 
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);

curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);

curl_setopt($ch, CURLOPT_URL, $Url);
$result = curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

curl_exec(): supplied resource is not a valid cURL handle resource in ...
Run Code Online (Sandbox Code Playgroud)

我真的不在乎它是什么协议,只需要它能够工作。

谢谢。

jLy*_*ynx 5

遇到同样的问题后,我找到了解决方案

$PROXY_HOST = "xxx.xxxxxx.com";
$PROXY_PORT = "89";
$PROXY_USER = "yourproxyusername";
$PROXY_PASS = "yourproxypassword";

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "$PROXY_USER:$PROXY_PASS");
curl_setopt($ch, CURLOPT_PROXY, "https://$PROXY_HOST:$PROXY_PORT");


curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response= curl_exec($ch);
$error = curl_error($ch); 
echo $error;
echo $response;
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

需要注意的一件事是,对于 NordVPN,您必须使用 HTTP 代理 (SSL) 的端口 89,并且用户名和密码不是您的帐户用户名和密码,而是您可以在帐户页面上找到的代理特定凭据。

也不要引用我的话,但我认为你需要使用 PHP 7.3+ 才能工作。