php怎么取request,PHP-如何在Guzzle中获取Request对象?
我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块:SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响应.我看到这里有$index,它指向当前项目的数量.但是我无法访问$items变量可见的范围.无论如何,如果我什至可以通过use($items)访问它,那么在循环的第二遍中,我会得到错误的索引,因为$items数组中的索引将从0开始,而$index则大于100.因此,此方法将不起作用.
$client = new Client();
$iterator = function() {
while($items = getSomeItemsFromDb(100)) {
foreach($items as $item) {
echo "Start item #{$item['id']}";
yield new Request('GET', $item['url']);
}
}
};
$pool = new Pool($client, $iterator(), [
'concurrency' => 20,
'fulfilled' => function (ResponseInterface $response, $index) {
// how to get $item['id'] here?
},
'rejected' => function (RequestException $reason, $index) {
call_user_func($this->error_handler, $reason, $index);
}
]);
$promise = $pool->promise();
$promise->wait();
我想我能做些什么
$request = new Request('GET', $item['url']);
$request->item = $item;
然后在“已实现”的处理程序中只是为了从$response获取$request-这将是理想的.但正如我所看到的那样,没有办法做类似$response-> getRequest()的事情.
关于如何解决这个问题的任何建议?
解决方法:
不幸的是,在Guzzle中不可能收到请求.有关更多详细信息,请参见响应创建.
但是,您可以返回一个不同的Promise,并使用each_limit()代替Pool(内部,pool类只是对EachPromise的包装).这是更通用的解决方案,可与任何类型的诺言一起使用.
$client = new Client();
$iterator = function () use ($client) {
while ($items = getSomeItemsFromDb(100)) {
foreach ($items as $item) {
echo "Start item #{$item['id']}";
yield $client
->sendAsync(new Request('GET', $item['url']))
->then(function (ResponseInterface $response) use ($item) {
return [$item['id'], $response];
});
}
}
};
$promise = \GuzzleHttp\Promise\each_limit(
$iterator(),
20,
function ($result, $index) {
list($itemId, $response) = $result;
// ...
},
function (RequestException $reason, $index) {
call_user_func($this->error_handler, $reason, $index);
}
);
$promise->wait();
标签:guzzle,php
来源: https://codeday.me/bug/20191111/2021098.html
php怎么取request,PHP-如何在Guzzle中获取Request对象?相关推荐
- 关于php:如何在Guzzle中读取响应有效的URL?6.0(Guzzle获取重定向后的实际请求地址URL)
本文转自关于php:如何在Guzzle中读取响应有效的URL?6.0 How to read the response effective URL in Guzzle ~6.0 我已经搜索了大约2个小 ...
- 如何在PHP中获取客户端IP地址[重复]
本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...
- SpringMvc4中获取request、response对象的方法
springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...
- java+script+当前日期_如何在JavaScript中获取当前日期?
如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...
- 如何在JavaScript中获取时间戳
如何在JavaScript中获取时间戳 +运算符 我们可以使用+运算符将日期对象直接转换为UNIX时间戳. 例如,我们可以这样写: +new Date() +日期对象之前操作者触发valueOf的方法 ...
- 关于Activity的getReferrer():如何在Activity中获取调用者?
http://blog.csdn.net/u013553529/article/details/53856800 关于Activity的getReferrer()之一:如何在Activity中获取调用 ...
- Struts2.x中获取request,response,session的方式
Struts2.x中获取request,response,session的方式有两种:非IOC方式和IOC方式: 一:非IOC方式: 要获得request,response,session 这些对象, ...
- java如何实取随机数_java - 如何在Kotlin中获取随机数?
java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...
- php mysql 到表最后_如何在PHP中获取MySQL表的最后插入ID?
如何在PHP中获取MySQL表的最后插入ID? 我有一张表,经常插入新数据. 我需要获取表格的最后一个ID. 我怎样才能做到这一点? 它类似于SELECT MAX(id) FROM table吗? g ...
最新文章
- [JAVA] DUMP
- AAAI 2021最佳论文《Informer》作者:Transformer 最新进展
- 云网融合 — 云网之争
- WPF error: does not contain a static 'Main' method suitable for an entry point
- java-web hibernate中的懒加载问题
- 【字符串问题】求一个字符串中重复出现的最长的子串
- 程序开发入门工具之CodeBlocks
- matlab norm函数_Matlab测夹角
- linux汉诺塔实验报告,汉诺塔问题实验报告
- 图片占内存容量计算公式
- 为什么手机打电话的时候不能同时上网?
- 手机支付宝服务器安全证书安装不了,手机上如何安装支付宝的安全证书?
- 监控和路由器不在同一个ip段_如何把二级路由器当交换机使用
- C++阶段03笔记03【文件操作(文本文件读写、二进制文件读写)】
- 在线编码工具_每个新编码员都需要25种工具
- npm installCould not resolve dependency:peer... 原因和解决方案
- 数学文化 卢卡斯数列和黄金分割
- 易支付代付系统 易商付(espay.cn)提供 全新UI页面设计功能齐全
- bootstrap-switch开关按钮表单插件
- 网页颜色搭配技巧nbsp;文字字体、字号…
热门文章
- 用 Excel+VBA 与 SQL Server 数据库交互
- Leetcode 242.有效的字母异位词(哈希表)
- 3. 什么是icmp?icmp与ip的关系_月入3万的大龄剩女相亲被拒:如果余生是你,晚一点有什么关系...
- sizeof与strlen使用中的问题
- Python 文件读写操作-Python零基础入门教程
- java 程序流程控制知识点_JAVA基础知识点梳理三:流程控制语句
- C++的六个默认函数
- php改变iframe的src,js动态改变iframe的src属性
- java ssh 那一层应该捕获异常_java ssh异常(大神来看看啊)
- 麦块不显示服务器,为什么开不了服务器啊!