gpt4 book ai didi

guzzle - 在 Guzzle 中访问被拒绝的并发请求的响应

转载 作者:行者123 更新时间:2023-12-04 13:31:06 32 4
gpt4 key购买 nike

我正在使用 Guzzle 并发请求工具:
http://docs.guzzlephp.org/en/latest/quickstart.html#concurrent-requests

我的代码类似于示例代码:

use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

$client = new Client();

$requests = function ($total) {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
for ($i = 0; $i < $total; $i++) {
yield new Request('GET', $uri);
}
};

$pool = new Pool($client, $requests(100), [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
// this is delivered each successful response
},
'rejected' => function ($reason, $index) {
// this is delivered each failed request
},
]);

// Initiate the transfers and create a promise
$promise = $pool->promise();

// Force the pool of requests to complete.
$promise->wait();

问题是我的一些请求返回了 500 个 HTTP 响应的响应,但仍然发送了一些内容(例如为什么会发生错误)。不幸的是,Guzzle 将具有 500 个状态代码的 http 响应归类为“已拒绝”,我似乎无法获得原始响应,因为被拒绝的函数中不存在该参数。

但是我可以访问 $reason .就我而言,它包含一个像这样的 JSON:
{
xdebug: "..."
}
xdebug属性包含 HTML 作为字符串,如下所示:

GuzzleHttp\Exception\ServerException: Server error: `GET http://example.com` resulted in a `500 Internal Server Error` response: {"failure_reason":"Useful message"} in [...stacktrace ...]



虽然这包含原始响应,但我无法轻松提取它,因为它隐藏在 HTML 中,使其非常无用。我也不知道这首先是如何设置的。

因此,我的问题是,如何访问被拒绝的并发请求的响应?

最佳答案

经过一番努力,我终于设法回答了我自己的问题。 $reasonGuzzleException .

因此,我们可以检查它是什么类型的异常并执行适当的逻辑,如下所示:

[
...,
'rejected' => function ($reason, $index) {
if ($reason instanceof GuzzleHttp\Exception\ClientException) {
$body = $reason->getResponse()->getBody();
}
},
]

请注意,并非所有 GuzzleException 都有响应。见 http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions更多细节。

关于guzzle - 在 Guzzle 中访问被拒绝的并发请求的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40015253/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com