Guzzle 在后台进程上抛出 RejectionException 而不是 ConnectionException

laravel

1个回答

写回答

22099765

2025-07-09 16:44

+ 关注

php
php

使用 Guzzle 进行网络请求时,我们经常会遇到连接超时或者网络错误的情况。一般情况下,当请求失败时,Guzzle 会抛出 ConnectionException 异常,我们可以通过捕获该异常来处理错误情况。然而,在某些特定的场景下,我们可能希望在后台进程上抛出 RejectionException 异常,而不是 ConnectionException 异常。本文将介绍如何在 Guzzle 中抛出 RejectionException 异常,并提供一个示例代码。

什么是 RejectionException 异常?

RejectionException 异常是 Guzzle 提供的一种异常类型,用于表示请求被拒绝的情况。当我们在后台进程中进行网络请求时,如果请求失败,我们可以选择抛出 RejectionException 异常,使得请求的调用者能够更好地处理该异常。

为什么使用 RejectionException 异常?

使用 RejectionException 异常的好处在于,它可以与 Promise(承诺)机制结合使用。Promise 是一种用于处理异步操作的编程模型,它可以帮助我们更好地处理网络请求的结果。通过使用 RejectionException 异常,我们可以将请求的结果封装在 Promise 对象中,并通过该对象来处理请求的成功或失败。

如何在 Guzzle 中抛出 RejectionException 异常?

要在 Guzzle 中抛出 RejectionException 异常,我们需要使用 Guzzle 的 Middleware(中间件)机制。Middleware 是 Guzzle 提供的一种机制,用于在请求发送前后进行一些额外的处理。通过编写自定义的 Middleware,我们可以在请求失败时抛出 RejectionException 异常。

下面是一个示例代码,演示如何在 Guzzle 中使用 Middleware 抛出 RejectionException 异常:

php

use GuzzleHttp\Client;

use GuzzleHttp\Exception\ConnectException;

use GuzzleHttp\Exception\RequestException;

use GuzzleHttp\Promise\PromiseInterface;

use Psr\Http\Message\RequestInterface;

use Psr\Http\Message\ResponseInterface;

$client = new Client();

$middleware = function (callable $handler) {

return function (RequestInterface $request, array $options) use ($handler) {

return $handler($request, $options)->then(

function (ResponseInterface $response) {

return $response;

},

function (RequestException $e) {

throw new RejectionException($e->getMessage(), $e->getcode(), $e);

}

);

};

};

$client = new Client([

'handler' => $middleware($client->getconfig('handler')),

]);

$response = $client->get('https://example.com')->wAIt();

echo $response->getBody();

在上述代码中,我们首先定义了一个 $middleware 变量,它是一个匿名函数。这个匿名函数接受一个 $handler 参数,表示原始的请求处理程序。在匿名函数内部,我们通过调用 $handler 来发送请求,并在请求的成功或失败回调中进行处理。在请求失败的回调中,我们抛出了 RejectionException 异常,以便后续的 Promise 处理器能够捕获并处理该异常。

接下来,我们将 $middleware 应用到 Guzzle 的配置中,以便所有的请求都能使用该 Middleware。最后,我们发送一个 GET 请求到 https://example.com,并等待请求的结果。

通过上述代码示例,我们可以看到如何在 Guzzle 中使用 Middleware 抛出 RejectionException 异常,并通过 Promise 处理器来处理请求的结果。

本文介绍了如何在 Guzzle 中抛出 RejectionException 异常,并提供了一个示例代码。通过使用 RejectionException 异常,我们可以更好地处理网络请求的失败情况,并通过 Promise 处理器来处理请求的结果。在实际的项目中,根据具体的需求,我们可以选择使用 ConnectionException 异常或者 RejectionException 异常来处理网络请求的错误情况。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号