Curl + proxy - 如果代理地址不可用,则重新加载脚本

时间:2012-06-26 19:29:39

标签: php list curl proxy

我有一个问题 - 我正在使用CURL和PROXY。我从付费网络服务获取代理地址列表。该列表如下所示(示例):

123.456.789.012:1234
123.456.789.012:1234
123.456.789.012:1234
123.456.789.012:1234
123.456.789.012:1234
123.456.789.012:1234
123.456.789.012:1234

我们可以说,上面提到的列表可以在这里找到:http://example.com/list_with_the_proxy

我的PHP代码如下所示:

<?php
$url = 'http://connect.to.another.example.net/'; //I want to open this url using one of the proxy address from the list

$proxy_url = 'http://address.of.proxy.example.org';

function RandomLine($filename) { 
    $lines = file($filename) ; 
    return $lines[array_rand($lines)] ; 
} 

$random_proxy = RandomLine($proxy_url); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXY, $random_proxy); 
$data = curl_exec($ch); 
curl_close($ch); 
echo $data;

?>

我注意到了一些问题 - 有时某些代理服务器无法访问,并且该网站正在加载&amp;装载&amp; loading ...如果网站加载太长,有没有可能重新加载脚本并获得新的随机代理?例如,如果代理在5秒内没有响应,脚本将再次加载?

2 个答案:

答案 0 :(得分:1)

查看CURLOPT_TIMEOUT,在每种情况下,如果在合理的时间内没有获得任何数据,请重新加载。您还确定来自代理列表站点的数据是否正确通过并且因此没有挂起?

答案 1 :(得分:0)

实际上,您只是面临一个常见问题 - 无论是PHP还是卷曲 - 都不会自动解决。这有很多原因,但更普遍的原因是你无法自动解决这个问题。

您想通过某个代理列表建立连接。但另一方面,您无法控制该列表中的代理。所以你可能会得到一个无效的代理。

根据定义代理是什么,您需要信任该地址或删除它。但是,如果你相信它,但你的决定是错误的,你可能会被愚弄。因为您使用自动化措施但没有告诉您是否可以信任代理列表源是否可靠,我认为源不是真的可靠。因此,您会遇到希望轻松解决的问题,但实际上并非如此。

我无法判断这是否真的是一个问题。但是,我可以说,stackoverflow.com可能不是提出问题的正确网站。

所以这不是一个真正的答案,而是一个冗长的评论。答案明智,这是主观的,甚至没有建设性,因为你还没有分享你的代理提供者的地址。

保重。并非所有这些代理列表都可以安全使用。但更普遍的是,不要指望所有这些代理实际上都能正常工作。这些名单可能会有所变化。你可以得到你所支付的费用,或者,当你寻找一个可靠的代理时,为什么不自己运行?