好用的PHP高性能多并发restful的HTTP Client
时间:2022-07-23
本文章向大家介绍好用的PHP高性能多并发restful的HTTP Client,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
This is high performance curl wrapper written in pure PHP. It's compatible with PHP 5.4+ and HHVM. Notice that libcurl version must be over 7.36.0, otherwise timeout can not suppert decimal.
这是一个高性能的PHP封装的HTTP Restful多线程并发请求库,参考借鉴了httpresful 、multirequest等优秀的代码。它与PHP 5.4和hhvm兼容。 注意,libcurl版本必须>=7.36.0,否则超时不支持小数。
大家好,今天的主角是它: https://github.com/sinacms/MultiHttp ,这是本人写的一个curl工具库,在生产中十分好用,所以拿出来分享给大家,欢迎大家提issue/merge request, 点赞什么的。
<?php
// Include Composer's autoload file if not already included.
require __DIR__.'/vendor/autoload.php';
use MultiHttpRequest;
use MultiHttpResponse;
//单个请求
$responses=array();
$responses[] = Request::create()->addQuery('wd=good')->get('http://baidu.com?', array(
'timeout' => 3,
'timeout_ms' => 2000,
'callback' => function (Response $response) {
}))->send();
$responses[] = Request::create()->get('http://qq.com', array(
'callback' => function (Response $response) {
//sth
}))->addOptions(array(
'method' => Request::PATCH,
'timeout' => 3,
))->send();
//test post
$responses[] = Request::create()->post(
'http://127.0.0.1',array('data'=>'this_is_post_data'), array(
'callback' => function (Response $response) {
//sth
}))->send();
foreach ($responses as $response) {
echo $response->request->uri, ' takes:', $response->duration, "ntnt";
}
?>
//Multi-request 多个请求:
<?php
use MultiHttpMultiRequest;
$mr = MultiRequest::create();
$rtn = $mr->addOptions(
array(
array(
'url' => 'http://google.com',
'timeout' => 2,
'method' => 'HEAD',
'data' => array(
),
'callback' => function (Response $response) {
//sth
}
),
))
->add('GET', 'http://sina.cn',array(), array(
'timeout' => 3
))
->import(Request::create()->trace('http://sohu.cn', array(
'timeout' => 3,
'callback' => function (Response $response) {
//sth
}))->applyOptions())
->send();
foreach ($rtn as $response) {
echo $response->request->uri, ' takes:', $response->duration, ' ', "ntnt";
}
?>
options选项有:
'url' => 'CURLOPT_URL',
'debug' => 'CURLOPT_VERBOSE',//for debug verbose
'method' => 'CURLOPT_CUSTOMREQUEST',
'data' => 'CURLOPT_POSTFIELDS', // array or string , file begin with '@'
'ua' => 'CURLOPT_USERAGENT',
'timeout' => 'CURLOPT_TIMEOUT', // (secs) 0 means indefinitely
'connect_timeout' => 'CURLOPT_CONNECTTIMEOUT',
'referer' => 'CURLOPT_REFERER',
'binary' => 'CURLOPT_BINARYTRANSFER',
'port' => 'CURLOPT_PORT',
'header' => 'CURLOPT_HEADER', // TRUE:include header
'headers' => 'CURLOPT_HTTPHEADER', // array
'download' => 'CURLOPT_FILE', // writing file stream (using fopen()), default is STDOUT
'upload' => 'CURLOPT_INFILE', // reading file stream
'transfer' => 'CURLOPT_RETURNTRANSFER', // TRUE:return string; FALSE:output directly (curl_exec)
'follow_location' => 'CURLOPT_FOLLOWLOCATION',
'timeout_ms' => 'CURLOPT_TIMEOUT_MS', // milliseconds, libcurl version > 7.36.0 ,
怎么样,什么人性、直观吧,
另外,建议大家用最新stable版本, 有很多好用的feature, 比如 expectsJson() 会直接验证response是json,并解析成php array( or hashmap),更多特性请看tests目录的使用。
欢迎大家使用它 https://github.com/sinacms/MultiHttp .
- Enumerable#zip特性
- java小技术之生成二维码
- java实现发送邮件服务器,SMTP协议发送邮件
- HttpURLConnection实现两个服务端的对接
- java获取properties配置文件值
- 安全退出app,activoty栈管理
- JavaBean转Map方法
- JsBridge实现JavaScript和Java的互相调用
- JAVA-FTP批量大文件传输
- 独家 | 一文读懂TensorFlow(附代码、学习资料)
- 解决openssh漏洞,升级openssh版本
- 解决NTPD漏洞,升级Ntpd版本
- 独家 | 手把手教TensorFlow(附代码)
- HBase Region自动切分细节
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 原创|如果懂了HashMap这两点,面试就没问题了
- RTSP协议网络摄像头互联网直播开源流媒体平台
- RTSP协议网页无插件播放,匿名登录不显示设备资源如何解决?
- 设计模式~代理模式
- Linux工具入门:make工具与Makefile文件
- PF_RING的多种负载均衡方法
- 【拓展】686- 如何在 Web 上大规模生成 UUID
- Linux进程管理与性能监控
- 重学数据结构(一、线性表)
- Jmeter系列(49)- 详解 HTTP Cookie 管理器
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- ELK + Filebeat + Kafka 分布式日志管理平台搭建
- 一切皆是文件:UNIX,Linux 操作系統的設計哲學
- 【JS】687- 几行代码摸清楚上拉加载原理
- CTO 写的代码,全网被吐槽,真是绝了