PHP cURL 在连接后从代理接收到 HTTP 代码 407

PHP cURL Received HTTP code 407 from proxy after CONNECT

php curl 有代理问题。

下面是我的代码:

<?php
$proxylist = file('proxy.txt');
$random_proxy = $proxylist[mt_rand(0,count($proxylist)-1)];
$pinfos = explode(':', $random_proxy);
$proxyipport = $pinfos[0].':'.$pinfos[1];
$proxyuserpwd = $pinfos[2].':'.$pinfos[3];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://google.com');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxyipport);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuserpwd);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch).'<br/>';
}
curl_close($ch);
echo $result;
?>

proxy.txt 中代理的格式是 ip:port:user:pass,所有代理都在工作。

问题是当我在 CURLOPT_PROXYCURLOPT_USERPWD 中使用 $proxyipport$proxyuserpwd 时,curl 结果抛出错误 Received HTTP code 407 from proxy after CONNECT。但是,当我将这些变量替换为实际的 ip:portuser:pass 时,它会正常工作。我还做了 $proxyipport$proxyuserpwdecho,它向我展示了预期的 ip:portuser:pass

有人可以告诉我做错了什么以及如何解决吗? 提前致谢!

很可能是换行符\n,所以试试:

$proxylist = file('proxy.txt', FILE_IGNORE_NEW_LINES);

如果它是另一个隐藏字符或 Windows 格式文件,那么用 \r 你可以尝试:

$pinfos = explode(':', $random_proxy);
$pinfos = array_map('trim', $pinfos);