正常写了一个简单的curl抓取程序,但是执行之后不管是访问本地还是远程url速度都超过10秒响应。这是为什么啊
注:程序里有一个10*10的for循环,需要执行100次。

解决方案 »

  1.   

    代码如下:
    for($x=0;$x<=9;$x++){
    $z[]=$x;
    }foreach($z as $x5){
    foreach($z as $x6){
    $final=$x5.$x6.'';
    $url = "http://test1.edgesoft.cn/postvalue.php";
    $post_data = array (
        "number" => $final,     
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

    $output = curl_exec($ch);
    curl_close($ch);
    //若某个结果包含某个信息   匹配则输出密码
    if(count(explode('false',$output))==1){
    echo "<span style='color: red;'> 输出密码$final 高亮</span></br>";
    }
    echo $output;

    }
    }
      

  2.   

    一开始我考虑可能是一次连续请求造成的,后来加入休眠停顿也不行。
    如下:
    for($x=0;$x<=9;$x++){
    $z[]=$x;
    }foreach($z as $x5){
    foreach($z as $x6){
    $final=$x5.$x6.'';
    $url = "http://test.localhost.cn/postvalue.php";
    $post_data = array (
        "number" => $final,     
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

    $output = curl_exec($ch);
    curl_close($ch);
    //若某个结果包含某个信息   匹配则输出密码
    if(count(explode('false',$output))==1){
    echo "<span style='color: red;'> 输出密码$final 高亮</span></br>";
    }
    echo $output; ob_flush();
    flush();
    sleep(0.1);
    ob_end_flush();

    }
    }
      

  3.   

    你在循环中执行 curl 100次,假定每次耗时 1 秒(不算多吧)那么就是 100 秒了你可以 curl_multi 并发一下,那就快多了
      

  4.   

    嗯,谢谢唠叨,请问正常curl在POST抓取中都会很慢么(5秒以上),还是1秒以下。
    用sleep试验的时候总感觉在一开始的请求过程中会有一个缓慢的过程(类似阻塞,5秒左右),然后第一个提交返回之后就正常了。
      

  5.   

    sleep 只是减缓结果的产生,你已经都嫌慢了,还要有意使他更慢吗?抓取的速度如何,取决于网络和对方响应的速度(curl_getinfo的结果中就有详细的报告)