【问题标题】:Guzzle how to handle RequestException when host is offline主机离线时如何处理RequestException
【发布时间】:2020-01-26 14:13:20
【问题描述】:

我在 laravel 框架中使用 Guzzle,但是当主机离线时,我得到一个异常而不是你可以通过 getStatusCode() 得到的状态码。我现在对请求进行了尝试,但在此方法之外,我有一个检查状态码的方法。我的问题是如何在 catch 中返回正确的响应,以便可以在此方法之外调用 getStatusCode()

我发出请求的代码如下所示:

public function makeRequest($method, $requestUrl, $queryParams = [])
    {
        try{
            $client = new Client(['http_errors' => false]);
            return $client->request($method, $requestUrl, [
                'query' => $queryParams
            ]);
        }catch(RequestException $exception){
            LOG::info($exception->getMessage());
            return $exception->getResponse();
        }
    }

【问题讨论】:

  • 你也需要捕获其他异常,例如ConnectException,ClientException, ServerException
  • @AbuSayem RequestException 似乎也处理 ConnectException 但会查看其他 2
  • 在最新版本中,它与RequestException github.com/guzzle/guzzle/commit/…分开

标签: php exception guzzle


【解决方案1】:

你的想法(总是从方法中返回 Response 对象)在设计上不起作用。我的意思是你已经看到了,在某些情况下没有Response 对象(例如,当无法建立与主机的连接时,因此在这种情况下甚至没有启动 HTTP 流,这就是为什么你不有任何 HTTP 状态代码)。

IMO 是让您的代码了解异常的最佳方式。不要试图在你的makeRequest() 中处理它,让它进一步流动,直到你真正可以处理它的地步。

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多