<?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);//输出
?>