[转]curl_multi 实现准多进程发请求
FROM : http://blog.sina.com.cn/s/blog_515b90d00100jtnv.html
curl_multi函数族:
curl_multi_close
curl_multi_exec
curl_multi_getcontent
curl_multi_add_handle
curl_multi_info_read
curl_multi_init
curl_multi_remove_handle
curl_multi_select
用法步骤:
第一步:调用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
下面看我在一个小项目中的使用:
public function Request($requestdata,$kw)
{
$mh = curl_multi_init();
$running=null;
$user_agent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
foreach($requestdata as &$data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $data['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_TIMEOUT , 100000);
curl_multi_add_handle($mh,$ch);
$data['ch']=$ch;
$data['start']=microtime(1);
}unset($data);
do{
while(($execrun = curl_multi_exec($mh, $running)) == CURLM_CALL_MULTI_PERFORM);
while($done = curl_multi_info_read($mh)) {
foreach($requestdata as $data)
{
if ($data['ch'] === $done['handle']) {
$html = curl_multi_getcontent($done['handle']);
call_user_func($data['callback'], $data['url'], $html,round((microtime(1)-$data['start']),2),$kw);
curl_multi_remove_handle($mh, $done['handle']);
}
}
}
if (!$running) break;
while (($res = curl_multi_select($mh)) === 0);
if ($res === false) break;
}while(true);
curl_multi_close($mh);
}
[转]curl_multi 实现准多进程发请求的更多相关文章
- 用apache的httpclient发请求和接受数据
此处发请求的是用httpclient4,请自己下载所需要的jar包. 发post请求,并得到数据. String url = "http://localhost:8080/lee" ...
- ajax是怎么发请求的和浏览器发的请求一样吗?cookie
下午设置cookie时出现了个问题 用ajax发的post请求php,在php的方法里设置了cookie,然后在浏览器请求的php里打印cookie值但是一直获取不到cookie的值 分析: 1.aj ...
- tomcat发请求,查看各个环节的耗时时间
从一台机器给另一台机器tomcat发请求,查看各个环节的耗时时间 - 业精于勤,荒于嬉:行成于思,毁于随. - CSDN博客https://blog.csdn.net/YAOQINGGG/articl ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
- 使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi: fastcgi_connect_timeout 75; 链接 fastcgi_read_timeout 600; 读取 fastcgi_send_timeout 600; 发请求
使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi: fastcgi_connect_timeout 75; 链接 fastcgi_read_timeout 600; ...
- PHP通过curl向其它服务器发请求并返回数据
在很多时候,我们都需要请求第三方的服务器来获取一些数据,比如token,比如百度的主动推送,那么我们的php如何实现向第三方服务器发请求呢?我们可以通过curl来实现 首先定义请求的url,然后创建h ...
- 工作总结 用, 隔开数据 后台不可以用 List<string> 接收 get请求直接通过浏览器发请求传数组或者list到后台
旁边的 css js 为项目的 加载 css js 地址 只加载引用的样式 js http://localhost:8736/LinInFoKPI/ExcelPrint?line=&start ...
- 【PHP开发】用curl向https发请求时的35号错误
放了个假发现以前写的程序的模拟登陆不管用了,中间输出,发现curl向https发请求时没有返回数据,输出错误信息,得到: curl_errno($ch) -----> 35 curl_error ...
- 从发请求到AJAX到同源政策
1 发请求的各种方法 使用form标签(会在当前页面刷新或者新开一个页面刷新) <form action="" method=post/get> <input ...
随机推荐
- MySql中时间类型总结
最近建表要用到时间类型的数据,但对时间类型的数据一向不了解,就总结了一下.. 一.日期DATE 一个日期.支持的范围是“1000-01-01”以“9999-12-31”.MySQL显示日期用 “YYY ...
- 在Mac上配置Android adb命令
一 adb定义: adb(android debug bridge)是android系统中的一种命令行工具,通过它可以和android设备或模拟器通信. 二 在Mac上的配置过程 启动终端 进入当前用 ...
- 【原创+译文】官方文档中声明的如何创建抽屉导航栏(Navigation Drawer)
如需转载请注明出处:http://www.cnblogs.com/ghylzwsb/p/5831759.html 创建一个抽屉导航栏 抽屉式导航栏是显示在屏幕的左边缘,它是应用程序的主导航选项面板.它 ...
- git 一般的开发流程中的代码管理
一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...
- jQuery 安装方法
在WEB中使用jQuery有两种安装(引入)方式. 1.直接下载jQuery包放置到工程中,然后用js导入的方式连接到WEB页面中 2.利用CDN的公网资源,如百度.新浪等. 访问 http://cd ...
- MongoDB 存储引擎Wiredtiger原理剖析
今天开始看MongoDB 3.2的文档,发现了这么两句话 Support for Multiple Storage Engines MongoDB supports multiple storage ...
- oracle表空间相关
数据库被划分为若干个表空间,每个表空间内保存一组相关的逻辑对象.每个表空间由一个或者多个数据文件组成.oracle中的数据逻辑上存储在表空间里,物理上存储在属于该表空间的数据文件里.表空间是用户和物理 ...
- zju 1937 初涉——深度优先搜索
#include "stdio.h" int a[11],b[11]; int k,flag,n,s; void DFS(); int main() { int i; while( ...
- Hive beeline update
Hive cli vs beeline The primary difference between the two involves how the clients connect to Hive. ...
- 计算机中的颜色XIV——快速变换颜色的V分量
基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...