发送多个请求时如何将结果与请求匹配?

2024-04-04

总结

正如其标题所示,Guzzle 允许一次发送多个请求以节省时间,如下所示文档 http://docs.guzzlephp.org/en/latest/http-client/client.html#sending-requests.

$responses = $client->send(array(
    $requestObj1,
    $requestObj2,
    ...
));

(given that each request object is an instance of
Guzzle\Http\Message\EntityEnclosingRequestInterface)

当响应返回时,为了确定哪个响应是针对哪个请求的,我们可以循环每个请求并获取响应(仅在执行上述命令后可用):

$response1 = $requestObj1->getResponse();
$response2 = $requestObj2->getResponse();
...

B、问题

如果请求对象包含相同的数据。无法识别原始请求。

假设我们有以下场景,需要创建 2 篇文章:A 和 B 在远程服务器上:something.com/articles/create.json

每个请求都有相同的 POST 数据:

subject: This is a test article

创建后,Guzzle 会返回 2 个位置的响应:

something.com/articles/223.json
something.com/articles/245.json

使用上述方法将响应链接到其请求,我们仍然不知道哪个响应是针对哪篇文章的,因为请求对象是完全一样的.

因此在我的数据库中我无法写下结果:

article A -> Location: 245.json
article B -> Location: 223.json

因为也可以反过来:

article A -> Location: 223.json
article B -> Location: 245.json

解决方案是在 POST 请求中添加一些额外的参数,例如

subject: This is a test article
record: A

然而,距离服务器将返回错误并且不会创建文章,因为它不理解关键“记录”。距离服务器是第三方服务器,我无法改变它的工作方式。

另一个正确的解决方案是在请求对象上设置一些特定的 id/标签,以便我们以后可以识别它。但是,我查看了文档,但没有方法可以唯一标识请求,例如

$request->setID("id1")

or

$request->setTag("id1")

这个问题已经困扰我几个月了,但仍然无法解决这个问题。

如果您有解决方案,请告诉我。

非常感谢,你救了我!!!!

感谢您阅读这篇长文。


我找到了一种正确的方法来做到这一点,Guzzle 允许在请求完成后添加回调。所以我们可以通过在批次中的每个请求上设置它来实现这一点

默认情况下每个请求都可以这样创建

$request = $client->createRequest('GET', 'http://httpbin.org', [
    'headers' => ['X-Foo' => 'Bar']
]);

所以,为了达到我们想要的目的:

$allRequests = [];
$allResults = [];

for($k=0; $k<=10; $k++){
    $allRequests['key_'.$k] = $client->createRequest('GET', 'http://httpbin.org?id='.$k, [
        'headers' => ['X-Foo' => 'Bar'],
        'events' => [
            'complete' => function ($e) use (&$allResults, $k){
                $response = $e->getResponse();
                $allResults['key_'.$k] = $response->getBody().'';
            }
        ]
    ]);
}

$client->sendAll(array_values($allRequests));

print_r($allResults);

所以现在 $allResults 具有每个相应请求的结果。

例如$allResults['key_1'] 是 $allRequests['key_1'] 的结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送多个请求时如何将结果与请求匹配? 的相关文章

  • 循环 PHP 嵌套数组 - 将值提取到刀片视图中 (Laravel)

    我知道关于这个主题有很多问题 但没有一个完全解决这个问题 据我所知 我在 Laravel 项目中有一个 PHP 数组 仅供参考 是通过 Guzzle 响应返回的 PHP 数组 users array 2 error gt bool fals
  • 发送 GuzzleHttp\Psr7\Request 时 Guzzle6 错误资源类型无效:数组

    我试图使用 GuzzleHttp Psr7 Request 发送代码 不知何故我收到错误 Invalid resources type array 以下是我的代码 params name gt myName id gt myId clien
  • 我如何在 Laravel 中需要 Composer 自动加载器?

    我要安装guzzlehttps github com guzzle guzzle 我阅读了参考资料 但我对这一部分感到困惑 从该教程中 要求需要 Composer 自动加载器 所以似乎需要添加require vendor autoload
  • 如何从HTTP状态码获取HTTP状态文本? [复制]

    这个问题在这里已经有答案了 是否有任何标准函数 或在curl Guzzle 中 可以从HTTP 状态代码号获取HTTP 状态文本 描述 getHttpStatusText 404 Not Found 我知道我可以创建一个像这样的地图 404
  • 如何在 Guzzle 5 中发送 PUT 请求的参数?

    我有这段代码用于发送 POST 请求的参数 它的工作原理是 client new GuzzleHttp Client request client gt createRequest POST http example com test ph
  • Laravel Passport - 功能测试返回未经授权的 401

    我正在尝试测试我的登录端点 其中成功的响应将返回access token除其他事项外 我在用着RefreshDatabase 所以我更改了控制器上的登录方法来检索client secret via a DB称呼 我测试了一个dd 我可以确认
  • POST 请求适用于 Postman,但不适用于 Guzzle

    在我的 Laravel 应用程序中 我定期需要使用 Guzzle 将数据 POST 到 API API 使用不记名令牌进行身份验证 并请求和接受原始 json 为了进行测试 我使用 Postman 访问了 API 一切都运行良好 邮递员标题
  • 我可以使用 Guzzle 进行 GraphQL API 消费吗?

    google verse 中没有太多关于在 PHP 中使用 GraphQL API 的信息 从我的角度来看 有几个包主要是关于创建您自己的 GraphQL API 但没有任何特定于消费的包 我可能把事情变得过于复杂了 或者我的问题的解决方案
  • 使用 Guzzle 6 将文件上传到 API 端点

    我可以使用 Postman 将文件上传到 API 端点 我正在尝试将其转换为从表单上传文件 使用 Laravel 上传文件并使用 Guzzle 6 发布到端点 Screenshot of how it looks in Postman I
  • Guzzle http 的 Laravel 中的错误日志记录被截断

    Guzzle http 正在截断超过 120 个字符的异常 但我需要记录完整的异常消息 我怎样才能做到这一点 我正在使用 laravel 4 2 22 try whatever catch GuzzleHttp Exception Requ
  • Laravel Http Facade 中的 PHP Curl 代理选项

    我正在使用 Laravel 的 Http 外观来发出请求 例如 Http withHeaders user agent gt My User agent gt retry 3 500 gt get https example com gt
  • Guzzle 6 结果返回并带有 HTTP 标头

    我对 Guzzle 6 x 如何返回结果有疑问 因此 当我尝试执行以下操作时 我收到 语法错误 json decode我的结果 我用过var dump and print r 得到我的实际结果 结果发现我的 JSON 结果返回时包含一个 H
  • 如何同时执行多个Guzzle请求?

    我可以使用 Guzzle 执行单个请求 并且到目前为止我对 Guzzle 的性能非常满意 但是 我在 Guzzle API 中读到了有关 MultiCurl 和批处理的内容 有人可以向我解释如何同时发出多个请求吗 如果可能的话异步 我不知道
  • 设置elasticsearch php客户端的connect_timeout

    我想在我的elasticsearch php 客户端到我的elasticsearch 服务器之间配置一个小的超时 我尝试将一些参数传递给 guzzle 客户端 但似乎这不起作用 这是代码 params array params hosts
  • Guzzle HTTP 请求从 POST 转换为 GET

    当我尝试向外部 API 发布帖子时 发生了一件非常奇怪的事情 我尝试向 URL 发出 POST 请求 但 Guzzle 发出 GET 请求 这是对此 API 的合法操作 但返回不同的内容 这是代码 request this gt clien
  • 在 Laravel 8 中捕获 HTTP 客户端错误

    你如何捕捉抛出的错误HTTP客户端 https laravel com docs 8 x http client 例如超时 以便在您可以对错误执行任何操作以避免停止执行之前 它不会在 Laraval 调试器 在调试模式下 中抛出curl 错
  • 将成员添加到 MailChimp 列表时出现 400 错误请求

    我正在发送一个POST请求以下资源 http developer mailchimp com documentation mailchimp reference lists members 并得到 400 我明白错误意味着什么 http d
  • Laravel/Guzzle - POST 二进制文件内容

    我正在尝试向第 3 方 API 发出简单的 POST 请求 API 接受文件作为 BODY 参数 具体来说 文件内容必须是二进制的 我已使用 Postman 成功发布到此第 3 方 API 主体配置如下 上传文件时 我使用的是 Larave
  • 将 cURL 请求转换为 Guzzle

    我正在尝试使用Guzzle而不是直接使用cURL来实现HTTP请求 我如何使用 Guzzle 发出相同类型的请求 或者我应该坚持使用 cURL ch curl init Set the URL curl setopt ch CURLOPT
  • 迭代亚马逊S3上文件夹中的对象

    我们有一个应用程序 用户可以创建自己的网页并托管它们 我们使用 S3 来存储静态页面 在这里 由于我们每个用户有 100 个存储桶的限制 我们决定为每个用户使用文件夹桶内的用户 现在 如果用户想在他的域上托管他的网站 我们会向他询问域名 当

随机推荐

  • 维护和重用现有的 webdriver 浏览器实例 - java

    基本上每次我从 eclipse 运行 java 代码时 webdriver 都会启动一个新的 ie 浏览器并在大部分情况下成功执行我的测试 然而 我有很多测试要运行 而且 webdriver 每次都会启动一个新的浏览器会话 这很痛苦 我需要
  • Raspberry Pi 上的 Sqlite4java

    我想在 Raspberry Pi 上使用我的 java 项目 此代码依赖于 sqlite4java 它使用许多平台 包括 Arm 处理器 的本机实现link http code google com p sqlite4java downlo
  • 如何让 vscode 知道 SCM 何时可见?

    我想用 VScode 的键绑定制作切换键 使用 alt 1 到 5 切换资源管理器和搜索 scm 调试扩展 我可以找到 explorerViewletVisible 或 searchViewletVisible 但我找不到 scm 源代码控
  • 如何从 Angular 范围中排除元素?

    我的前提是错误的 虽然 AngularJS 确实减慢了速度 但这并不是因为我下面描述的问题 然而 正是 flim 对我的问题 如何从 Angular 范围中排除元素 的回答才证明了这一点 我正在构建一个网站 该网站使用 d3 Raphael
  • PhoneGap iOS 7 和 localStorage

    我目前正在构建一个 PhoneGap 3 3 0 iOS 应用程序 该应用程序使用 Ember js EmberData 和 LocalStorage 适配器来保存数据 读了一些文章后就像这个 StackOverflow 问题 https
  • 集合接口和WCF

    我正在使用 C 和 WCF 来做 Web 服务 我有一个实现 IEnumerable 的类的成员变量 我尝试通过执行以下操作将其序列化为我的数据合同的一部分 DataContract class Item DataMember privat
  • 约束消失的情况:更高等级类型的怪异

    下面描述的所有实验都是使用 GHC 8 0 1 完成的 这个问题是后续问题具有类型别名混淆的 RankNTypes https stackoverflow com q 40252867 2751851 那里的问题归结为像这样的函数类型 LA
  • 获取 i18next 翻译器 缺少密钥

    这是我第一次使用 i18next 我不知道如何让它发挥作用 这似乎是文档 http i18next com docs 对我来说是不完整的 这是我使用 i18next 的 HTML 代码
  • JDBC无法在openshift上连接mysql数据库

    我设法使用 phpMyAdmin 等在 OpenShift 上设置 MySQL 数据库 我被告知我的数据库的主机名和端口分别是 OPENSHIFT MYSQL DB HOST 和 OPENSHIFT MYSQL DB PORT 我将其放入
  • 多次借用的借用错误

    我正在 Rust 中实现一个就地递归解析器 但遇到了一些借用错误 代码片段重现了问题 尽管它不是很有用 use std vec Vec struct MyBorrows lt a gt val a mut i32 impl lt a gt
  • com.fasterxml.jackson.databind.exc.InvalidTypeIdException:无法将类型 id '[' 解析为子类型

    我有一个名为 Fruit 的抽象类 我把 JsonTypeInfo and JsonSubTypes其如下 JsonTypeInfo use JsonTypeInfo Id NAME include JsonTypeInfo As PROP
  • 如何让ListView在转换到另一个路线时保留其滚动?

    我想在我的颤动应用程序中完成滑动到右侧的转换 问题是路线转换有点创建我想要从中转换的页面的新实例 所以ListView滚动重置 看视频 https youtu be PdLhyvNoU8 这就是我创建新路线的方式 oldRoute need
  • dompdf 图像不是真实图像,无法读取或为空

    我在使用 dompdf 时遇到问题 我插入的图像在转换为 pdf 文件时无法读取 当我使用将其加载到 dompdf 时 php方法 img src gt 我得到一个带有 X 的方框缩略图 它说 图像不是真实图像 不可读或为空 用文本打印我的
  • Nodejs JOIN 查询:格式化 JSON 输出

    我正在制作一个非常简单的 RIGHT JOIN 查询 但我无法正确格式化输出 这是查询 connection query sql SELECT users rides FROM users RIGHT JOIN rides ON users
  • 需要帮助 Discord 机器人队列

    我一直在尝试为不和谐机器人和我的 gt q命令基本上工作为join play queue同时 问题是它只能同时对 2 首歌曲进行排队 所以我需要帮助使其对多首歌曲进行排队 queues check queue def check queue
  • 重复 data.frame 的每一行列中指定的次数

    df lt data frame var1 c a b c var2 c d e f freq 1 3 扩展上面 data frame 的每行前两列 以便每行重复 freq 列中指定的次数 最简单的方法是什么 换句话说 从这里开始 df v
  • 如何将 Twitter 配置移出控制器? (导轨)

    我正在使用推特宝石 https github com sferik twitter通过斯费里克 我认为在控制器中存储我的 Twitter 应用程序的配置非常混乱 class HomeController lt ApplicationCont
  • 如何使用`[[`和`$`作为函数?

    我知道我可以这样做 x lt list a 1 b 1 y lt list a 1 JSON lt rep list x y 10000 sapply JSON a 然而 我在使用时遇到了困难 以同样的方式 sapply JSON a sa
  • 如何使用列表理解来模拟 sum()?

    是否可以使用 sum 来模拟类似的东西列表理解 http en wikipedia org wiki List comprehension Python 例如 我需要计算列表中所有元素的乘积 list 1 2 3 product magic
  • 发送多个请求时如何将结果与请求匹配?

    总结 正如其标题所示 Guzzle 允许一次发送多个请求以节省时间 如下所示文档 http docs guzzlephp org en latest http client client html sending requests resp