php curl 多线程方法
- <?php
- /**
- * curl 多线程
- * @param array $array 并行网址
- * @param int $timeout 超时时间
- * @return array
- */
- function Curl_http($array,$timeout){
- $res = array();
- $mh = curl_multi_init();//创建多个curl语柄
- foreach($array as $k=>$url){
- $conn[$k]=curl_init($url);
- curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间
- curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
- curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别
- curl_setopt($conn[$k], CURLOPT_HEADER, 0);//这里不要header,加块效率
- curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
- curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);
- curl_multi_add_handle ($mh,$conn[$k]);
- }
- // 执行批处理句柄
- $active = null;
- do{
- $mrc = curl_multi_exec($mh,$active);//当无数据,active=true
- }while($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时
- while($active && $mrc == CURLM_OK){//当无数据时或请求暂停时,active=true
- // if(curl_multi_select($mh) != -1){
- do{
- $mrc = curl_multi_exec($mh, $active);
- }while($mrc == CURLM_CALL_MULTI_PERFORM);
- // }
- }
- foreach ($array as $k => $url) {
- curl_error($conn[$k]);
- $res[$k]=curl_multi_getcontent($conn[$k]);//获得返回信息
- $header[$k]=curl_getinfo($conn[$k]);//返回头信息
- curl_close($conn[$k]);//关闭语柄
- curl_multi_remove_handle($mh , $conn[$k]);//释放资源
- }
- curl_multi_close($mh);
- return $res;
- //测试
- $array = array(
- "http://www.weibo.com/",
- "http://www.renren.com/",
- "http://www.qq.com/"
- );
- $data = Curl_http($array,'10');//调用
- print_r($data);//输出
- exit;
- ?>
这个多线程的写法步骤:
第一步:调用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
php curl 多线程方法的更多相关文章
- CURL使用方法详解
php采集神器CURL使用方法详解 作者:佚名 更新时间:2016-10-21 对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...
- curl多线程类。
<?php /* * Curl 多线程类 * 使用方法: * ======================== $urls = array("http://baidu.com" ...
- PHP CURL 多线程 GET/POST 类
PHP CURL 多线程 GET/POST 类 2015-01-01 分类:技术文章 阅读(623) 评论(0) 如果有需要更正或更高效的建议,欢迎在OSchina分享~\(≧▽≦)/~ http:/ ...
- [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口
原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题
- C#常用多线程方法
1. Thread类 C#多线程编程中Thread类需要包含名称空间System.Threading. class Program { static void Main(string[] args) ...
- curl多线程下载类
<?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...
- Qt 最简单的多线程方法QtConcurrent::run()
Qt 最简单的多线程方法QtConcurrent::run()(转载) 最近编写了一个软件,没有考虑多线程的问题,编好以后,软件在执行计算的时候,鼠标响应有时候会延迟,但是完全能用,考虑到后续随着计算 ...
- 六种多线程方法解决UI线程堵塞
http://blog.csdn.net/oyi319/article/details/6851371 一.六种多线程方法 .NET Framework2.0框架提供了至少4种方式实现多线程,它们是& ...
- CURL 多线程问题
http://blog.csdn.net/wslz2001/article/details/12117127 默认情况下libcurl完成一个任务以后,出于重用连接的考虑不会马上关闭 如果没有新的TC ...
随机推荐
- 【每日一linux命令5】命令的结合与定向
命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>). 管道(途径)的用法: "命令一[选项]"|"命令二[选项]",也就是将& ...
- Which language is best, C, C++, Python or Java?什么编程语言最好
Either you fuck the life or the life fucks you. 转载自 quora 大致翻译一下,不喜勿喷,谢谢支持!以下是内容: I have used each o ...
- EL表达式杂项
1.<%@ page isELIgnored="false" %> 是否忽略EL表达式,如果值为ture,那么 ${..}这样的会直接原样输出,不会进行EL表达式计算 ...
- [LeetCode] Reverse Linked List 倒置链表
Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...
- [LeetCode] Rotate List 旋转链表
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- kubernetes 文档
kubernetes 官方文档:http://kubernetes.io/docs/ null
- 5G关键技术评述
业内重大事件: 张 平:无线通信领域专家,北京邮电大学教授,博士生导师,现任北京邮电大学无线新技术研究所(WTI)所长.泛网无线通信教育部重点实验室主任以及中德软件研究所副所长.张平教授是国家宽带无 ...
- 数据集偏斜 - class skew problem - 以SVM松弛变量为例
原文 接下来要说的东西其实不是松弛变量本身,但由于是为了使用松弛变量才引入的,因此放在这里也算合适,那就是惩罚因子C.回头看一眼引入了松弛变量以后的优化问题: 注意其中C的位置,也可以回想一下C所起的 ...
- UDP通信
package com.slp; import java.io.IOException; import java.net.DatagramPacket; import java.net.Datagra ...
- UEFI+GPT安装windows
首先bios开启uefi windows安装选择驱动器界面:F10 进入命令行: list disk select disk 0 clean convert gpt