php curl稳定,php curl并发请求

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 "
***************************************************************
";

$url = 'https://www.baidu.com';

$r = $a->curl($url, $param);

print_r($r);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值