<?php
function get_random_proxy()
{
srand ((double)microtime()*1000000);
$f_contents = file ("proxy.txt");
$line = $f_contents[array_rand ($f_contents)];
return $line;
}
$proxy = get_random_proxy();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "example.com");
curl_setopt($ch, CURLOPT_PROXY,$proxy);
curl_setopt($ch, CURLOPT_TIMEOUT ,30);
curl_exec($ch);
curl_close($ch);
?>
如果在30秒内无法连接,curl将关闭连接。
如您所见,我正在使用代理列表。但是,有些代理ips有时会在30秒内连接有问题,而卷曲是在30秒内无法加载时关闭连接。
如果达到卷曲超时,我想尝试另一个ip进行卷曲连接。现在,如果ip不工作,curl正在关闭所有内容。我想尝试另一个IP。那么,你能告诉我一个功能吗?
为@rubayeet编辑。添加了新的代理功能
答案 0 :(得分:4)
您只需使用curl_errno来测试CURLE_OPERATION_TIMEDOUT是否发生
答案 1 :(得分:1)
function get($url, $proxy){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY,$proxy);
curl_setopt($ch, CURLOPT_TIMEOUT ,30);
$response = curl_exec($ch);
curl_close($ch);
return $response
}
$url = 'example.com';
while(true) {
$proxy = get_random_proxy();
$response = get($url, $proxy);
if ($response === False) continue;
else break;
}
//do something with $response
答案 2 :(得分:0)
您必须创建一个新的curl会话才能连接到另一个代理。因此,在代码周围放置一个foreach循环并循环遍历代理数组。
此外,您可以使用curl_errno()和curl_error()来检查错误(例如您的超时)。
设置CURLOPT_RETURNTRANSFER并将其加载到var中以修改或处理它可能会有用。