gpt4 book ai didi

php - 当服务器服务器使用 guzzle 重试中间件响应 200 个状态代码时,如何停止重试 HTTP 调用?

转载 作者:行者123 更新时间:2023-12-05 04:25:56 35 4
gpt4 key购买 nike

以下代码抛出错误“参数 4 &$options expected to be a reference, value given”

此代码来自guzzle_retry_middleware#on-retry-callback

我想在收到 self::STATUS_DRAFT === $document->statusresponse 200

后停止 guzzle 重试调用
$listener = function(int $attemptNumber, float $delay, RequestInterface $request, array &$options, ?ResponseInterface $response)
{
$document = \json_decode();

if (self::STATUS_DRAFT === $document->status)
{
return $options['retry_enabled'] = false;
}
};

$stack = HandlerStack::create();
$stack->push(GuzzleRetryMiddleware::factory([
'on_retry_callback' => $listener,
'retry_on_status' =>[429, 503, 200]
]));

$response = $guzzleClient->get($url, ['handler' => $stack]);

最佳答案

这个测试代码对我来说似乎工作正常。我创建了一个随机吐出一个数字的请求,该数字用于重试回调。

我使用的是 PHP 7.3 以及最新版本的 Guzzle 和中间件。如果您收到有关 $options 变量的错误,请尝试在您的环境中隔离此代码并确认没有版本不匹配。

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleRetry\GuzzleRetryMiddleware;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;

error_reporting(E_ALL);
ini_set('display_errors', '1');

$stack = HandlerStack::create();
$stack->push(GuzzleRetryMiddleware::factory());

$listener = function(int $attemptNumber, float $delay, RequestInterface &$request, array &$options, ResponseInterface $response) {
$doc = json_decode($response->getBody()->getContents());
echo "<br>Received {$doc->status} so ";

if ($doc->status < 50) {
$options['retry_enabled'] = false;
echo "stopping";
return;
}
echo "retrying";
};

$client = new Client([
'handler' => $stack,
'on_retry_callback' => $listener,
'retry_on_status' => [200]
]);

$response = $client->get('https://eouqfts30zafzos.m.pipedream.net/');

我得到了这个回复

Received 69 so retrying
Received 68 so retrying
Received 31 so stopping

这是我的 composer.json 文件

{
"require": {
"guzzlehttp/guzzle": "^7.0",
"caseyamcl/guzzle_retry_middleware": "^2.7"
}
}

关于php - 当服务器服务器使用 guzzle 重试中间件响应 200 个状态代码时,如何停止重试 HTTP 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73131806/

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