curl 多线程请求 (可使用代理IP)
来源:互联网 发布:淘宝怎么注册用户名 编辑:程序博客网 时间:2024/06/05 05:42
<?php
/**
* curl 多线程
* @param array $urlArray 并行网址
* @param str $method 请求方式(get,post)
* @param str $header 请求头
* @param str $proxy 代理IP
* @return array
*/
function http_request_multi($urlArray,$method='',$header='',$proxy='')
{
unset($mh);
unset($curl);
$mh = curl_multi_init();
for($i=count($urlArray);$i>=0;$i--)
{
$curl[$i] = curl_init();
$random_ip= random_ip();
curl_setopt($curl[$i], CURLOPT_URL, $urlArray[$i]);
curl_setopt($curl[$i], CURLOPT_HEADER, 0);
curl_setopt($curl[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl[$i], CURLOPT_TIMEOUT, 30);
curl_setopt($curl[$i], CURLOPT_HTTPHEADER, array("X-FORWARDED-FOR:{$random_ip}","CLIENT-IP:{$random_ip}")); //构造IP
curl_setopt($curl[$i], CURLOPT_USERAGENT, 'iTunes/12.3.3 (Windows; Microsoft Windows 7 x64 Ultimate Edition Service Pack 1 (Build 7601); x64) ');
curl_setopt($curl[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl[$i], CURLOPT_SSL_VERIFYHOST, false);
if($proxy){
curl_setopt($curl[$i], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl[$i], CURLOPT_PROXY, $proxy);
}
if($method){
curl_setopt($curl[$i], CURLOPT_POST, 1);
curl_setopt($curl[$i], CURLOPT_POSTFIELDS, $method[$i]);
}
if($header){
curl_setopt($curl[$i], CURLOPT_HTTPHEADER, $header);
}
curl_multi_add_handle($mh,$curl[$i]);
}
$action = null;
do{
$mrc = curl_multi_exec($mh,$action);
}while ($mrc == CURLM_CALL_MULTI_PERFORM);
unset($num);
$num = 0;
while($action && $mrc == CURLM_OK) {
if(curl_multi_select($mh) == 0)
{
$num++; //如果有一个0 那么num 就加1
}
if($num == 30) //假如已经有30个0等待不到活动链接了 那就退出本次循环吧。
{
break;
}
if(curl_multi_select($mh) == -1){
usleep(100);
}
do{
$mrc = curl_multi_exec($mh,$action);
}while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
unset($newcomment);
$newcomment = array();
for($i=count($urlArray);$i>=0;$i--)
{
$newcomment[] = curl_multi_getcontent($curl[$i]);
curl_multi_remove_handle($mh, $curl[$i]);
curl_close($curl[$i]);
}
curl_multi_close($mh);
if($newcomment){
array_shift($newcomment);
$newcomment = array_reverse($newcomment);
return $newcomment;
}else{
return false;
}
}
// 构造IP
function random_ip(){
return rand(1,254).'.'.rand(1,254).'.'.rand(1,254).'.'.rand(1,254);
}
//测试
$array = array(
"http://www.baidu.com/",
"http://www.renren.com/",
"http://www.qq.com/"
);
$data = http_request_multi($array);//调用
print_r($data);//输出
?>
/**
* curl 多线程
* @param array $urlArray 并行网址
* @param str $method 请求方式(get,post)
* @param str $header 请求头
* @param str $proxy 代理IP
* @return array
*/
function http_request_multi($urlArray,$method='',$header='',$proxy='')
{
unset($mh);
unset($curl);
$mh = curl_multi_init();
for($i=count($urlArray);$i>=0;$i--)
{
$curl[$i] = curl_init();
$random_ip= random_ip();
curl_setopt($curl[$i], CURLOPT_URL, $urlArray[$i]);
curl_setopt($curl[$i], CURLOPT_HEADER, 0);
curl_setopt($curl[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl[$i], CURLOPT_TIMEOUT, 30);
curl_setopt($curl[$i], CURLOPT_HTTPHEADER, array("X-FORWARDED-FOR:{$random_ip}","CLIENT-IP:{$random_ip}")); //构造IP
curl_setopt($curl[$i], CURLOPT_USERAGENT, 'iTunes/12.3.3 (Windows; Microsoft Windows 7 x64 Ultimate Edition Service Pack 1 (Build 7601); x64) ');
curl_setopt($curl[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl[$i], CURLOPT_SSL_VERIFYHOST, false);
if($proxy){
curl_setopt($curl[$i], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl[$i], CURLOPT_PROXY, $proxy);
}
if($method){
curl_setopt($curl[$i], CURLOPT_POST, 1);
curl_setopt($curl[$i], CURLOPT_POSTFIELDS, $method[$i]);
}
if($header){
curl_setopt($curl[$i], CURLOPT_HTTPHEADER, $header);
}
curl_multi_add_handle($mh,$curl[$i]);
}
$action = null;
do{
$mrc = curl_multi_exec($mh,$action);
}while ($mrc == CURLM_CALL_MULTI_PERFORM);
unset($num);
$num = 0;
while($action && $mrc == CURLM_OK) {
if(curl_multi_select($mh) == 0)
{
$num++; //如果有一个0 那么num 就加1
}
if($num == 30) //假如已经有30个0等待不到活动链接了 那就退出本次循环吧。
{
break;
}
if(curl_multi_select($mh) == -1){
usleep(100);
}
do{
$mrc = curl_multi_exec($mh,$action);
}while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
unset($newcomment);
$newcomment = array();
for($i=count($urlArray);$i>=0;$i--)
{
$newcomment[] = curl_multi_getcontent($curl[$i]);
curl_multi_remove_handle($mh, $curl[$i]);
curl_close($curl[$i]);
}
curl_multi_close($mh);
if($newcomment){
array_shift($newcomment);
$newcomment = array_reverse($newcomment);
return $newcomment;
}else{
return false;
}
}
// 构造IP
function random_ip(){
return rand(1,254).'.'.rand(1,254).'.'.rand(1,254).'.'.rand(1,254);
}
//测试
$array = array(
"http://www.baidu.com/",
"http://www.renren.com/",
"http://www.qq.com/"
);
$data = http_request_multi($array);//调用
print_r($data);//输出
?>
阅读全文
1 0
- curl 多线程请求 (可使用代理IP)
- CURL单线程请求(使用代理IP)
- CURL使用代理IP
- Java中使用多线程、curl及代理IP模拟post提交和get访问
- Java中使用多线程、curl及代理IP模拟post提交和get访问
- php curl使用代理发起请求
- Shell curl 和 wget 使用代理IP
- curl 代理使用
- HTTP协议 fsockopen模拟请求代理端发送get post请求 curl基本使用
- 多线程代理IP池
- 设置代理IP 设置完成后可发送抓取数据的请求
- PHP中使用curl及代理IP模拟post提交【两种实用方法】
- PHP中使用curl及代理IP模拟post提交【两种实用方法】
- 使用curl提交SOAP请求
- curl多请求并发使用
- 使用cURL发起https请求
- 使用curl发起https请求
- PHP模拟发送POST请求之五curl基本使用和多线程优化
- 八大排序算法-希尔排序
- Oracle数据库日期的处理
- wubi安装ubuntu DVD版
- ActiveMQ 出现FixedBackOff 异常一直出现无限制的连接导致资源占用异常
- Django 事务(参考文档与博客)
- curl 多线程请求 (可使用代理IP)
- pycharm激活(JetBrains IDEA 系列产品通用xx方法(license server))
- caffe 安装步骤与方法小结
- 10月16日 c语言 输入国际象棋棋盘
- java线程全面总结(基础易懂 适合新手)
- mac重启需重启本地svn服务
- linux系统Mysql5.6下载与安装
- linux下crontab的使用
- Union和Union All的区别