[转]CURL 非阻塞调用类
来源:互联网 发布:数据分析的道与术 pdf 编辑:程序博客网 时间:2024/05/17 01:04
<?php/***************************************************** * CURL 非阻塞调用类 * Auther: Linvo * Copyright(C) 2010/10/21 *******************************************************//* // 使用范例 // 传入参数说明 // url 请求地址 // data POST方式数据 //并发调用 $param1 = array( array( 'url' => "http://localhost/a.php?s=1", ), array( 'url' => "http://localhost/a.php?s=1", 'data' => array('aaa' => 1, 'bbb' => 2), ), ); //单个调用 $param2 = array( 'url' => "http://localhost/a.php?s=0", 'data' => array('aaa' => 1, 'bbb' => 2), ); //单个调用(GET简便方式) $param3 = 'http://localhost/a.php?s=2'; $ac = new AsyncCURL(); $ac->set_param($param1); $ret = $ac->send(); //返回值为请求参数顺序的结果数组(元素值为FALSE表示请求错误) var_dump($ret);*/class AsyncCURL{ /** * 是否需要返回HTTP头信息 */ public $curlopt_header = 0; /** * 单个CURL调用超时限制 */ public $curlopt_timeout = 20; private $param = array(); /** * 构造函数(可直接传入请求参数) * * @param array 可选 * @return void */ public function __construct($param = FALSE) { if ($param !== FALSE) { $this->param = $this->init_param($param); } } /** * 设置请求参数 * * @param array * @return void */ public function set_param($param) { $this->param = $this->init_param($param); } /** * 发送请求 * * @return array */ public function send() { if (!is_array($this->param) || !count($this->param)) { return FALSE; } $curl = $ret = array(); $handle = curl_multi_init(); foreach ($this->param as $k => $v) { $param = $this->check_param($v); if (!$param) { $curl[$k] = FALSE; } else { $curl[$k] = $this->add_handle($handle, $param); } } $this->exec_handle($handle); foreach ($this->param as $k => $v) { if ($curl[$k]) { $ret[$k] = curl_multi_getcontent($curl[$k]); curl_multi_remove_handle($handle, $curl[$k]); } else { $ret[$k] = FALSE; } } curl_multi_close($handle); return $ret; } //以下为私有方法 private function init_param($param) { $ret = FALSE; if (isset($param['url'])) { $ret = array($param); } else { $ret = isset($param[0]) ? $param : FALSE; } return $ret; } private function check_param($param = array()) { $ret = array(); if (is_string($param)) { $url = $param; } else { extract($param); } if (isset($url)) { $url = trim($url); $url = stripos($url, 'http://') === 0 ? $url : NULL; } if (isset($data) && is_array($data) && !empty($data)) { $method = 'POST'; } else { $method = 'GET'; unset($data); } if (isset($url)) { $ret['url'] = $url; } if (isset($method)) { $ret['method'] = $method; } if (isset($data)) { $ret['data'] = $data; } $ret = isset($url) ? $ret : FALSE; return $ret; } private function add_handle($handle, $param) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $param['url']); curl_setopt($curl, CURLOPT_HEADER, $this->curlopt_header); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, $this->curlopt_timeout); if ($param['method'] == 'POST') { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $param['data']); } curl_multi_add_handle($handle, $curl); return $curl; } private function exec_handle($handle) { $flag = null; do { curl_multi_exec($handle, $flag); } while ($flag > 0); }}
源码转自互联网
阅读全文
0 0
- [转]CURL 非阻塞调用类
- CURL非阻塞调用类【PHP】
- 阻塞和非阻塞系统调用
- 阻塞和非阻塞系统调用
- 系统调用 非阻塞处理 --- select函数
- [Linux]关于非阻塞socket调用connect
- Guava ListenableFuture实现异步非阻塞调用
- IO - 同步,异步,阻塞,非阻塞【转】
- 转阻塞socket和非阻塞socket
- 先调用了WSAASyncSelect(),connect()便是 非阻塞调用
- CAsyncSocket 异步非阻塞类
- 非阻塞
- 阻塞和非阻塞
- 阻塞和非阻塞
- 阻塞与非阻塞
- 阻塞与非阻塞
- 阻塞和非阻塞
- 阻塞和非阻塞
- android阅读器长按选择文字功能实现代码
- 类中构造回调函数,注意,回调处要有return才可以;`
- vb,net小结
- HTTPUrl-post网络请求数据
- QT工程实例
- [转]CURL 非阻塞调用类
- MySql基本查询、连接查询、子查询、正则表达查询讲解
- 提交订单系统自动发送邮件到收件人邮箱优化(邮件正文内容为当天数据,附件内容为当月数据)
- 程序员你为什么这么累:编码习惯之日志建议
- java注解之注解的使用和定义
- modelsim 快捷键
- fiddler
- 超级详细的swift语言搭建项目框架
- 交叉编译opencv3.1.0和opencv_contrib/,在R16上运行HelloOpencv程序