最近、プロキシをテストするための簡単な curl プログラムを作成しました。curl の出力が得られた場合、使用しているプロキシは良好です。保存して使用できます。それ以外の場合は、ダウンしているか、ビジー状態などです....
問題は、プロキシのリストをテストすると出力が得られることですが、OK リストから選択した 1 つだけで出力を取得したい場合、事実上ほぼ同じコードを使用しているにもかかわらず、何も得られないことです。ここにあります:
テスト用のコード (まったく同じプロキシをテストしています):
$url='http://google.com';
$curl_imelimit=20;
$allowed_time=19.980;
$file='190.110.86.202:8080
77.236.209.236:8080
213.185.231.4:8080
189.8.32.18:80
106.51.66.181:80
190.110.86.22:8080';
preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,4}/', $file, $proxies);
$options=array(
CURLOPT_REFERER => 'http://google.com',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 3,
CURLOPT_USERAGENT => null,
CURLOPT_TIMEOUT => $curl_timelimit,
CURLOPT_URL => $url,
CURLOPT_PROXY => $proxy);
foreach($proxies as $pr)
foreach($pr as $proxy){
$ch=curl_init();
curl_setopt_array($ch, $options);
$output=curl_exec($ch);
$info=curl_getinfo($ch);
echo $output.'</br>';
if ($info['total_time']>0 && $info['total_time']<$allowed_time){
echo '<p style="color:green;">'.$proxy.' OK</p>';
}
if ($info['total_time']==0 || $info['total_time']>$allowed_time)
echo '<p style="color:red;">'.$proxy.' NOT GOOD</p>';
set_time_limit(30);
curl_close($ch);
}
すべてのプロキシは時間内に正常に動作し、出力が得られます。上記のリストから 1 つのプロキシを使用してそれを繰り返したい場合、以下のコードを使用しても何も得られません。1 つのプロキシのコード:
$proxy='190.110.86.202:8080';
$url='http://google.com';
$curl_timelimit=20;
$options=array(
CURLOPT_REFERER => 'http://google.com',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 3,
CURLOPT_USERAGENT => null,
CURLOPT_TIMEOUT => $curl_timelimit,
CURLOPT_URL => $url,
CURLOPT_PROXY => $proxy);
$ch=curl_init();
curl_setopt_array($ch, $options);
$output=curl_exec($ch);
$info=curl_getinfo($ch);
curl_close($ch);
echo $output.'</br>';