我想通过PHP测量socks5服务器的速度,所以我编写了以下代码:
$url = 'http://cachefly.cachefly.net/1mb.test';
$proxy = '126.XXX.XXX.XXX:1080’;
//$auth = $username.':'.$password;
$fp = fopen('1mb.test', 'w');
$start = microtime(true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth);
$result = curl_exec($ch);
curl_close($ch);
$end = microtime(true);
fclose($fp);
$diff = $end - $start;
echo "elapsed time: ".$diff." seconds";
$a = 1024 / $diff;
echo '<br>'.floor($a).' kb/s';
不幸的是,代码无效。如果不使用socks5服务器,文件将被完全下载 - 否则不会。你们有谁知道为什么代码不起作用?关于如何实现目标,还有其他选择或建议吗?
真诚地说,赛义德。
答案 0 :(得分:1)
“没有socks5服务器,文件被下载”。换句话说,代理不起作用?
您没有检查卷曲错误。将以下内容添加到您的代码中,以了解下载未成功的原因:
$result = curl_exec($ch);
if ($result === FALSE) {
die(curl_error($ch));
}
永远不要假设某些处理外部资源的代码会被取代。您的代码可能是完美的,但外部资源每次都无法检查成功/失败的原因太多了。
答案 1 :(得分:0)
没有更多细节就无法分辨。究竟是怎么失败的?它总是失败吗?此外,您应该确保使用合理的最新libcurl版本,这样您就不会遇到旧错误。