curl_multi
来源:互联网 发布:软件实施顾问岗位职责 编辑:程序博客网 时间:2024/06/05 21:14
一般来说,想到要用curl_multi_init()时,目的是要同时请求多个url,而不是一个一个依次请求,否则就要curl_init()了。
不过,在使用curl_multi的时候,你可能遇到cpu消耗过高、网页假死等现象,可以看看如何解决curl_multi导致网页假死的问题
使用curl_multi的步骤总结如下:
第一步:调用curl_multi_init第二步:循环调用curl_multi_add_handle这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。第三步:持续调用curl_multi_exec第四步:根据需要循环调用curl_multi_getcontent获取结果第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close第六步:调用curl_multi_close
各函数作用解释:
curl_multi_init()初始化一个curl批处理句柄资源。curl_multi_add_handle()向curl批处理会话中添加单独的curl句柄资源。curl_multi_add_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。curl_multi_exec()解析一个curl批处理句柄,curl_multi_exec()函数有两个参数,第一个参数表示一个批处理句柄资源,第二个参数是一个引用值的参数,表示剩余需要处理的单个的curl句柄资源数量。curl_multi_remove_handle()移除curl批处理句柄资源中的某个句柄资源,curl_multi_remove_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。curl_multi_close()关闭一个批处理句柄资源。curl_multi_getcontent()在设置了CURLOPT_RETURNTRANSFER的情况下,返回获取的输出的文本流。curl_multi_info_read()获取当前解析的curl的相关传输信息。
测试例子
<?php // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOPT_URL, "http://note.youdao.com/"); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2, CURLOPT_URL, "http://www.hao123.com/"); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1); // 创建批处理cURL句柄 $mh = curl_multi_init(); // 增加2个句柄 curl_multi_add_handle($mh, $ch1); curl_multi_add_handle($mh, $ch2); $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) { usleep(100); } do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } $resp_array = array(); $resp_array[] = curl_multi_getcontent($ch1); $resp_array[] = curl_multi_getcontent($ch2); print_r($resp_array); // 关闭全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_close($ch1); curl_close($ch2); curl_multi_close($mh);?>
0 0
- curl_multi
- php curl_multi demo 例子
- Yun_Curl_Multi/ curl_multi的用法
- 对curl_multi的使用
- curl_multi实现并发请求
- php中curl_multi的应用
- PHP curl_multi 多文件下载
- php中curl_multi的应用
- PHP 多线程的实现 curl_multi
- php中curl_multi的应用
- php中curl_multi的应用
- PHP 多线程的实现 curl_multi
- php中curl_multi的应用
- php中curl_multi批处理请求
- curl_multi实现准多线程采集
- PHP使用curl_multi并发请求
- PHP中CURL_MULTI的使用方法简单示例
- php curl_multi 优化网络请求及多线程
- Unity3D中Layers和LayerMask解析
- componentsJoinedByString 和 componentsSeparatedByString 的方法的区别
- flex实现图片根据鼠标的滚动放大或缩小(以鼠标的的位置 为中心放大缩小)
- Java程序编译和运行的过程
- ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME 2012-12-17 11:27:36 分类: Linux 客户端配置好服务名后,用PL/SQL De
- curl_multi
- ASP.NET母版页中对控件ID的处理
- java中的properties类的用法
- ORA-12154: TNS: 无法解析指定的连接标识符
- linux常用命令----操作系统
- chrome皮肤编写教材
- Python中使用中文出现UnicodeDecodeError的原理和解决方法
- jsoncpp的简单应用
- Unity3d中EventTrigger的封装