接上一篇文章《用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("/ (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (\d{1,4}) /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;
}
分享到:
相关推荐
【CURL 在 Win 和 Linux 下的详细教程】 CURL 是一个强大的命令行工具,用于传输数据,支持多种协议,如 HTTP、HTTPS、FTP、FTPS 等。无论是 Windows 还是 Linux 操作系统,CURL 都可以方便地进行网络数据的抓取和...
在linux下(需要安装curl库),通过curl通过https协议,实现远程下载文件。测试时将宏定义中的地址和文件名修改为自己想要测试的即可。带有一定注释。
在Linux系统中,C++与curl库结合...这个示例展示了如何在Linux环境下使用C++和libcurl库实现文件下载,包括检查和创建目标目录以及使用多线程进行并发下载。通过这种方式,你可以高效地从网络上获取并存储大量数据。
在这个场景中,我们将关注如何使用C++编程语言,通过libcurl库来实现FTP的上传和下载功能。libcurl是curl项目的库形式,提供了一个方便的API,使得开发者能够在各种编程环境中利用curl的功能。 首先,我们需要理解...
在Qt5中,可以通过动态链接cURL库或者使用QNetworkAccessManager来间接实现cURL的功能。 1. **cURL库的集成**: 在Qt5项目中使用cURL,首先需要将cURL库添加到项目中。这通常涉及到配置项目的.pro文件,指定cURL库...
本文将深入探讨如何使用curl命令来实现在Linux环境下进行SFTP和FTP上传操作。 首先,让我们了解一下SFTP。SFTP是一种基于SSH(Secure Shell)的安全文件传输协议,它提供了安全的数据传输,保护了用户的登录凭证和...
想要就下哈,curl 在c语言下的例子。
本文将深入探讨curl的基本使用、新特性以及在Linux环境中的应用。 首先,curl的基本用法包括下载网页内容、发送HTTP请求、进行FTP操作等。例如,使用`curl http://example.com`可以直接在终端中获取指定URL的网页...
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 #### 一、概述 本文主要介绍如何在Ubuntu系统上使用`arm-linux-gcc`交叉编译器来编译openssl、zlib及curl三个库的过程。这三个库在嵌入式开发中非常常见,尤其...
英文版》和描述《curl命令可用来下载文件,或者模拟http请求,而且支持非常多的协议,这是一篇非常全面的说明,英文文字版》透露了本文所涉及的核心内容是关于Linux环境下curl命令的使用说明。curl是一个功能丰富的...
3. **linux**:指基于Linux内核的操作系统,这里特指使用Linux内核的ARM设备。 【压缩包子文件的文件名称列表】包括 "libcurl.so.4" 和 "curl": 1. **libcurl.so.4**:这是动态链接库文件,libcurl是curl的C库...
- 如果使用动态库,确保在所有需要curl的进程中都能访问到.dll文件。 通过这个简单的Qt工程,你已经掌握了如何在Qt中使用curl进行网络请求的基础知识。继续探索curl的更多功能和Qt的网络模块,将使你能够构建出更...
linux下curl的源码,编译成静态库的步骤如下: (1)./buildconf (2)./configure --with-ssl=ssl目录(如果不需要编译ssl则可以不写) --prefix=生成目录 --enable-static --without-libidn make make install
在Linux或Unix系统中,可以使用`curl`和`xargs`命令组合实现这一操作: ```bash curl -C - http://example.com/file.exe | xargs -I{} sh -c 'mv {} file.exe; exec ./file.exe' ``` 这段命令首先通过`curl`下载...
在这种情况下,单线程的请求方式效率低下,而利用curl实现多线程可以显著提高处理速度。本文将深入探讨如何在PHP中利用curl创建多线程类,以提升程序的性能。 首先,我们要理解curl在PHP中的作用。cURL是客户端URL...
在Windows上使用curl工具,开发者可以方便地进行API测试、文件上传下载、自动化脚本编写等工作,无需复杂的编程环境。由于curl的强大功能和广泛支持,它已经成为许多开发者不可或缺的工具。理解并熟练使用curl,可以...
php curl 多线程实现-php程序员的笔记
本文将详细介绍如何在Linux系统中编译并生成`curl`动态库。 首先,我们需要确保系统中已经安装了必要的编译工具,如`gcc`、`make`和`pkg-config`。如果没有,可以通过以下命令进行安装(以Ubuntu为例): ```bash ...
在Linux环境中,Curl以其高效、灵活的特点,成为了下载文件的理想选择,尤其是处理大文件或需要从多个源同时下载时。 Curl的安装非常简单,通常可以通过包管理器完成。例如,在RPM系统(如Red Hat、CentOS)上,...