<?php
class A
{
//PHP curl 参考http://www.php.net/manual/zh/ref.curl.php
/*
* curl_multi_init();//初始化
* curl_setopt();//设置传输项
* curl_multi_add_handle();//添加句柄
* curl_multi_exec();//执行句柄
* curl_multi_getcontent();//获取数据
* curl_multi_remove_handle();//移除句柄
* curl_multi_close();//关闭句柄
*
* */
public function curls($url, $param)//并发请求
{
$mh = curl_multi_init();
foreach ($url as $k => $v) {
$handles[$k] = curl_init($v);
//传输项设置curl_setopt 参考http://php.net/manual/zh/function.curl-setopt.php
curl_setopt($handles[$k], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handles[$k], CURLOPT_POST, 1);
curl_setopt($handles[$k],CURLOPT_HTTPHEADER,[]);
curl_setopt($handles[$k], CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($handles[$k], CURLOPT_POSTFIELDS, http_build_query($param));
curl_setopt($handles[$k], CURLOPT_ENCODING, 'gzip');
curl_setopt($handles[$k], CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($mh, $handles[$k]);
}
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
/*while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}*/
while ($active && $mrc == CURLM_OK) {
while (curl_multi_exec($mh, $active) === CURLM_CALL_MULTI_PERFORM) ;
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
if ($mrc == CURLM_OK) {
while ($info = curl_multi_info_read($mh)) {
//$mac = $info;
}
}
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
$contents = array('status' => true, 'content' => array(), 'error_msg' => array());
foreach ($handles as $i => $ch) {
$content = curl_multi_getcontent($ch);
if (curl_errno($ch) == 0) { //返回错误代码或在没有错误发生时返回 0 (零)。
var_dump($content);
} else { //存在错误,不再继续请求其他接口
$contents['error_msg'] = array(
'url' => $url[$i],
'msg' => curl_error($ch)//获取错误代码
);
curl_multi_close($mh);//关闭所有句柄
return $contents;
}
foreach ($handles as $ch) //移除批处理句柄
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh); //关闭批处理句柄
return $contents;
}
}
/*
*curl_init();//初始化
*curl_setopt();//设置传输项
*curl_exec();//执行句柄 获取数据
* curl_close();//关闭句柄
*
* */
public function curl($url, $postfields = '', $method = 'POST', $headers = array()){
$ci = curl_init();
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ci,CURLOPT_CONNECTTIMEOUT,30);
curl_setopt($ci,CURLOPT_TIMEOUT,30);
if ($method == 'POST') {
curl_setopt($ci,CURLOPT_POST,TRUE);
if ($postfields != '')
curl_setopt($ci,CURLOPT_POSTFIELDS,$postfields);
}
$headers[] = "User-Agent: *";
curl_setopt($ci,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ci,CURLOPT_URL,$url);
$result = curl_exec($ci);
$errno = curl_errno($ci);
curl_close($ci);
if ($errno == 0) {
return $result;
} else{
return ['errCode'=>-200,'errMsg'=>'失败','data'=>[]];
}
}
}
$urls = ['https://www.baidu.com'];
$param = ['token'=>'3695f501b9272191eec36955783dfd4d3c3f5783dfd4d3c3f191eec369556955783dfdf501b9272191eec36955783dfd'];
$a = new A();
$r = $a->curls($urls, $param);
print_r($r);
echo "<br>***************************************************************<br>";
$url = 'https://www.baidu.com';
$r = $a->curl($url, $param);
print_r($r);
网友评论