0

好的,所以我基本上想要的是,一旦使用了来自“proxies.txt”的代理,然后将其移动到诸如“used.txt”之类的文件中,因此只有新的未使用的代理保留在“proxies.txt”中因为我的 id 抓取程序每次启动时都会从列表的最顶部开始,并且每 24 小时只能从每个代理抓取一次 ID。

{
switch(@$argv[1]) {
    case '0':
    default:
        $list = fopen('proxies.txt', 'r');
        while(!feof($list))
        {
            $proxy = fgets($list);
            $idGen->generate($proxy);
        }
        fclose($list);
    break;
}
$loop++;
usleep(50000);
$idGen->report('Starting loop #'.$loop);

}

还有一种方法可以让我删除死代理当前的 curl 设置是

$tries = 0;
    $xData = '';
    $timeout = 3;
    //echo "Tries -> ";
    while($xData=='' && $tries < 3) {
        $ch = curl_init(); //curl init :D
        curl_setopt($ch,    CURLOPT_URL,                'website.com/idauth.php?t='.rand(100000000000,1000000000000000000000000000000000)); //url
        curl_setopt($ch,    CURLOPT_PROXY,              $proxy);
        curl_setopt($ch,    CURLOPT_RETURNTRANSFER,     1);
        curl_setopt($ch,    CURLOPT_CONNECTTIMEOUT,     $timeout);
        curl_setopt($ch,    CURLOPT_TIMEOUT,            $timeout);
        $data = curl_exec($ch);
        curl_close($ch);
        $rdata = $data;
        if(@$data{0} == '<') { 
            return;//Bad Proxy Detected.
        }
        if(strpos($data, 'Not Found') != FALSE) { 
            $data = '&UserId=0&k1=0&k2=0';
        }
        if($data != '&UserId=0&k1=0&k2=0') {
            if(strpos($data, '&k2=0') != FALSE) { 
                $data = '&UserId=0&k1=0&k2=0';
            } else {
                $xData = $data;
            }
        } else {
            echo $data."\n";
        }
        $tries++;
        }

    if($xData=='') {
        return;//Dead Proxy
    }
4

1 回答 1

0

将整个代理列表加载到数组中,进行操作并在完成后重新写出整个文件。

当您在请求中进行多线程处理时,在数据库中可能会更好地工作,这对您的问题来说似乎很自然。在这种情况下,只需删除等。

在您的顶级功能范围之外的某个地方:

$proxies = array()
function load_proxies() {
        global $proxies;
        $list = fopen('proxies.txt', 'r');
        while(!feof($list))
        {
            $proxy = fgets($list);
            $proxies[] = $proxy;
        }
        fclose($list);
}

function get_proxy() {
    global $proxies;
    return array_pop($proxies);
    //here you may want to save over proxies.txt, and write out the chosen proxy to used.txt
}
于 2013-05-29T17:34:20.843 回答