iry/request
Composer 安装命令:
composer require iry/request
包简介
README 文档
README
中文简体 ----- English
简介
该包通过对CURL的封装,轻松实现各种情况下的网络请求。 支持支持单线程和多线程并发请求。 可以随时无缝切换单线程和多线程的并发请求。
安装
composer require iry/request composer update
使用示例
1. Helper 助手函数
use \iry\http\Helper; Helper::get(url); //发送一个Get请求 Helper::post(url,$post); //发送一个post请求 Helper::put(url,'This is test'); //发送一个post请求 Helper::request(url,$argvs,isPost); Helper::upload(url,'/test.jpg',['id'=>100]);//上传文件 Helper::upload(url,['img'=>'/test2.jpg'],['id'=>101]);//上传文件 Helper::download(url,$dist); //下载一个文件
2. Request 使用方法:
示例
//1.简单用法 $res = (new Request($url)) -> getResult(); //2. 多任务并发请求 //常规写法 $http = new Request(); //$http->setThread(20);//设置最大20并发,任务总数超过20会分批处理 $http->add(url,config,requestID);// $http->add(.....); $thtp->call(function($requestId,$resVi,$currentRequest,$_this){ }); //连贯写法 (new Request()) -> setThread(20)->add('url','...')->....->add(url_n,'....')->call(function(){ });
支持的方法:
- getResult :获取所有请求结果,返回一个数组,每一元素是一个任务的结果
- call: 发送请求并将结果通过匿名闭包函数处理 推荐使用(特别适合大量的请求批量使用)
- setThread:设置线程数量
- on: 监听事件
- add:添加一个请求任务
- setTasks:批量设置一批任务
3. Request 各种用法的示例:
①. 简单使用【适用小的返回数据】
use iry\http\Request; //发送一个Get请求 $res = (new Request($url)) -> getResult(); //发送一个Post请求 $res = (new Request($url,['post'=>[...])) -> getResult();
②. 使用 ADD 添加多个任务,实现多线程并发请求
发送请求
$http = new Request(); //$http->add($url_1,$cfg_1,request_1_id); request_1_id 唯一ID 多个请求是用来跟踪请求结果用的 $http->add($url_2,$cfg_2,request_2_id)->add(....)->add(....); //支持连贯调用 //$result = $http->getResult(); or $http->call(..);
getResult方法
返回一个二维数组,requestID为键,处理结果的逻辑代码如下
$result = $http->getResult(); foreach($result as $itemResult){ $html = $http->getContent($itemResult);//获取到结果 $headerInfo = $http->getInfo($itemResult);//获取到头部信息 //.....更多的逻辑代码...... //todo 您的业务代码... }
以上是常规的业务流程,但是有一个弊端,必须等所有请求都完成之后在统一处理。 任务过程中任务太多占用内存较多。同时只要一个慢会导致所有请求的结果处理推后。
所以推荐如下方法处理 用 $http->call()方法代替 $http->getResult()
call方法
参数:
- callback function($requestID,$resVi,$request,$this){....}
- $maxRetryTimes 错误时最大重试次数 默认0(不重试)
//传一个匿名函数给Call 每一个请求完成之后会调用该匿名函数 $http->call(function($requestId,$resVi,$request,$http){ $content = $http->getContent($resVi); $info = $http->getInfo($resVi); if($info['http_code']===0){ $http->retry($requestId);//网络错误 加入重试队列 } //todo 你的业务代码... },3); //第二个参数 3 最大重试次数
③. retry方法可以很方便加入重试
参考上面代码
④. 使用批量添加任务
$http = new Request(); $http->setTasks([ [url1,$config],[url2,$config] ]); $http->call(function(){ //.... });
⑤. 监听动作【事件功能】
$http->on( 'before_request', function($this,$每批请求){...} ); $http->on( 'error', function($info,$curlError,$this){...} ) ->on( 'item_after_request', function($idx,$resVi,$currentRequest,$this){...} ) ->call(function(){ //.....更多的逻辑代码...... * })
支持的事件
//网络错误是触发 error: function($info,$curlError,$this) before_request:function($每批请求,$this){...} //每个任务请求前触发 item_before_request:function($idx,$config,$this){...} //每个任务请求对方响应完后触发 item_after_request:function($idx,$resVi,$currentRequest,$this){...}
⑥. 下在文件 特别是下载大文件。
一边下载一边写入文件不会占用太多内存
用法如上
//单线程获取 $res = (new Request($url,['to_file'=>'file address|ture'])) -> getResult(); //多线程获取 (new Request()) -> add($url_1,['to_file'=>'file address|ture'],requestID_1) -> add($url_2,['to_file'=>'file address|ture'],requestID_2) ->call( ... ) //多线程批量设置任务 (new Request()) ->setTasks([[url1,['to_file'=>'file/address/or/bool true'],'....']]) ->call(...)
⑦ __construct,add 第二个 config参数
常用参数:
- post: form-data array / raw-value 如:['name'=>'jack','id'=>123456]
相当于同时 设置 CURLOPT_POST:1 , CURLOPT_POSTFIELDS:form-data - to_file: fielName 将结果写入文件,边下载边写入到文件,
作用比较适合下载大文件或者大量数据内容。 参考 curl_setopt函数的第二个参数
config 为:
//如需要设置 CURLOPT_HTTPHEADER 和 CURLOPT_ENCODING ['httpheader'=>'...','encoding'=>'...'] //键 “httpheader” 为:CURLOPT_HTTPHEADER 去除 CURLOPT_之后的值,且不区分大小写。
声明:
使用之前请先读README.txt;
iry/request 适用场景与选型建议
iry/request 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 20 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 08 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「curl」 「post」 「request」 「php-request」 「curl-multi」 「Multi-threaded request」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 iry/request 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 iry/request 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 iry/request 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
cURL and cURL based Soap-Client for PHP
Simple cURL wrapper
Symfony bundle that integrates the PostNord PHP SDK
HTTP request logger middleware for Laravel
A fluent PHP CURL wrapper
Edit Posts button always visible
统计信息
- 总下载量: 20
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 4
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-08-16