`
muyu
  • 浏览: 223315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用linux的curl实现自动投票(多进程)

    博客分类:
  • php
阅读更多

接上一篇文章《用linux的curl实现自动投票 》!

 

 

为了提高投票速度,用PHP函数popen代替exec,它相当于把curl的执行推到了后台去运行,每推一次,增加一个进程。

 

<?php
/*
 *  多进程投票程序
 *  author: 木鱼
 *  blog:   http://muyu.iteye.com/
 *  
 *  关于多进程的代码参考了 回忆未来[张宴] http://blog.s135.com/post/311/
 */

/*------------获取proxy--------------*/
$result = array();

/*----------(1) mfxk.com---------*/
echo "\n";
$urlList = array(
    'http://www.mfxk.com/article/daili/54527.html',
    'http://www.mfxk.com/article/daili/54470.html',
    'http://www.mfxk.com/article/daili/54434.html',
);
foreach($urlList as $url) {
    echo "\nParsing web page: {$url}";
    $tmpHtml = file_get_contents($url);
    preg_match_all("/&nbsp;(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})&nbsp;(\d{1,4})&nbsp;/i", $tmpHtml, $matches);
    for ($i=0; $i< count($matches[0]); $i++) {
        $result[] = $matches[1][$i] . ":" . $matches[2][$i];
    }
}

/*----------(2) 996i.cn---------*/
echo "\n";
$urlList = array(
    'http://www.996i.cn/ip/sort033/7542.html',
    'http://www.996i.cn/ip/sort033/7520.html',
    'http://www.996i.cn/ip/sort033/7488.html',
    'http://www.996i.cn/ip/sort033/7487.html',
);
foreach($urlList as $url) {
    echo "\nParsing web page: {$url}";
    $tmpHtml = file_get_contents($url);
    preg_match_all("/\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{1,4})\s+/i", $tmpHtml, $matches);
    for ($i=0; $i< count($matches[0]); $i++) {
        $result[] = $matches[1][$i] . ":" . $matches[2][$i];
    }
}


/*------------去重--------------*/
$result = array_unique($result);

echo "\n\nParse excuted successfully!";
echo "\nTotal proxy:\t" . count($result);

/*------------多进程投票--------------*/
echo "\n\n\nStart to vote:";
$proxyList = $result;
while(!empty($proxyList)) {
    $proxy = array_shift($proxyList);
    run($proxy);
}
echo "\ndone!\n";


function run($proxy) {  
    global $p_number;  
    if ($p_number <= 0) {  
        $p_number = worker_processes($p_number);  
    }
    $p_number = $p_number - 1;  
    $out = popen("curl -m 30 -x {$proxy} -d \"id=1234\" http://www.example.com/VoteAction.php &", "r");
    pclose($out);
}

function worker_processes($p_number) {  
    $limit = 50;//允许推到后台的最大进程数  
    while ($p_number <= 0)  
    {  
        $cmd = popen("ps -ef | grep \"example.com\" | grep -v grep | wc -l", "r");  
        $line = fread($cmd, 512);
        pclose($cmd);
        $p_number = $limit - $line;
        if ($p_number <= 0) {
            sleep(1);//暂停1秒钟
        }
    }
    return $p_number;  
}
  
分享到:
评论
1 楼 rootsoso 2010-02-02  
用这段程序几乎无法在目前正式的投票程序进行投票,为了不被服务器Ban掉,还要找作者要两段重要的程序:

1. 如何找到free的proxy代理列表

2. 如何利用proxy进行投票

相关推荐

    CURL在win和linux下详细教程

    【CURL 在 Win 和 Linux 下的详细教程】 CURL 是一个强大的命令行工具,用于传输数据,支持多种协议,如 HTTP、HTTPS、FTP、FTPS 等。无论是 Windows 还是 Linux 操作系统,CURL 都可以方便地进行网络数据的抓取和...

    linux下用curl实现远程下载文件代码

    在linux下(需要安装curl库),通过curl通过https协议,实现远程下载文件。测试时将宏定义中的地址和文件名修改为自己想要测试的即可。带有一定注释。

    Linux C++ curl 文件下载功能代码

    在Linux系统中,C++与curl库结合...这个示例展示了如何在Linux环境下使用C++和libcurl库实现文件下载,包括检查和创建目标目录以及使用多线程进行并发下载。通过这种方式,你可以高效地从网络上获取并存储大量数据。

    最新版linux curl-7.71.1.tar.gz

    本文将深入探讨curl的基本使用、新特性以及在Linux环境中的应用。 首先,curl的基本用法包括下载网页内容、发送HTTP请求、进行FTP操作等。例如,使用`curl http://example.com`可以直接在终端中获取指定URL的网页...

    curl实现ftp上传下载

    在这个场景中,我们将关注如何使用C++编程语言,通过libcurl库来实现FTP的上传和下载功能。libcurl是curl项目的库形式,提供了一个方便的API,使得开发者能够在各种编程环境中利用curl的功能。 首先,我们需要理解...

    qt5使用curl实现文件下载的示例程序

    在Qt5中,可以通过动态链接cURL库或者使用QNetworkAccessManager来间接实现cURL的功能。 1. **cURL库的集成**: 在Qt5项目中使用cURL,首先需要将cURL库添加到项目中。这通常涉及到配置项目的.pro文件,指定cURL库...

    linux sftp、ftp上传(使用curl)

    本文将深入探讨如何使用curl命令来实现在Linux环境下进行SFTP和FTP上传操作。 首先,让我们了解一下SFTP。SFTP是一种基于SSH(Secure Shell)的安全文件传输协议,它提供了安全的数据传输,保护了用户的登录凭证和...

    linux下curl实例

    想要就下哈,curl 在c语言下的例子。

    Linux curl命令参数详解.docx

    Linux curl 命令可以使用 GET 或 POST 方式提交数据,例如: curl -G -d name=value1&name2=value2 http://www.baidu.com curl -d name=value1&name2=value2 http://www.baidu.com curl -d a=bc=dtxt@/tmp/txt ...

    用arm-linux-gcc交叉编译 openssl zlib curl

    ### 使用arm-linux-gcc交叉编译openssl、zlib与curl #### 一、概述 本文主要介绍如何在Ubuntu系统上使用`arm-linux-gcc`交叉编译器来编译openssl、zlib及curl三个库的过程。这三个库在嵌入式开发中非常常见,尤其...

    everything-curl linux命令curl的用法 英文版

    英文版》和描述《curl命令可用来下载文件,或者模拟http请求,而且支持非常多的协议,这是一篇非常全面的说明,英文文字版》透露了本文所涉及的核心内容是关于Linux环境下curl命令的使用说明。curl是一个功能丰富的...

    Qt工程中使用curl进行网络请求,最小程序

    - 如果使用动态库,确保在所有需要curl的进程中都能访问到.dll文件。 通过这个简单的Qt工程,你已经掌握了如何在Qt中使用curl进行网络请求的基础知识。继续探索curl的更多功能和Qt的网络模块,将使你能够构建出更...

    curl.tar.gz(linux下)

    linux下curl的源码,编译成静态库的步骤如下: (1)./buildconf (2)./configure --with-ssl=ssl目录(如果不需要编译ssl则可以不写) --prefix=生成目录 --enable-static --without-libidn make make install

    编译好的 curl 的arm linux 版本

    3. **linux**:指基于Linux内核的操作系统,这里特指使用Linux内核的ARM设备。 【压缩包子文件的文件名称列表】包括 "libcurl.so.4" 和 "curl": 1. **libcurl.so.4**:这是动态链接库文件,libcurl是curl的C库...

    curl断点续传

    在Linux或Unix系统中,可以使用`curl`和`xargs`命令组合实现这一操作: ```bash curl -C - http://example.com/file.exe | xargs -I{} sh -c 'mv {} file.exe; exec ./file.exe' ``` 这段命令首先通过`curl`下载...

    php利用curl实现多线程类.zip

    在这种情况下,单线程的请求方式效率低下,而利用curl实现多线程可以显著提高处理速度。本文将深入探讨如何在PHP中利用curl创建多线程类,以提升程序的性能。 首先,我们要理解curl在PHP中的作用。cURL是客户端URL...

    linux curl工具的windows版本

    在Windows上使用curl工具,开发者可以方便地进行API测试、文件上传下载、自动化脚本编写等工作,无需复杂的编程环境。由于curl的强大功能和广泛支持,它已经成为许多开发者不可或缺的工具。理解并熟练使用curl,可以...

    php curl 多线程实现-php程序员的笔记

    php curl 多线程实现-php程序员的笔记

    Linux中编译生成curl库.zip

    本文将详细介绍如何在Linux系统中编译并生成`curl`动态库。 首先,我们需要确保系统中已经安装了必要的编译工具,如`gcc`、`make`和`pkg-config`。如果没有,可以通过以下命令进行安装(以Ubuntu为例): ```bash ...

    Linux系统下超级强悍的下载工具Curl

    在Linux环境中,Curl以其高效、灵活的特点,成为了下载文件的理想选择,尤其是处理大文件或需要从多个源同时下载时。 Curl的安装非常简单,通常可以通过包管理器完成。例如,在RPM系统(如Red Hat、CentOS)上,...

Global site tag (gtag.js) - Google Analytics