使用GuzzleHTTP时如何检查端点是否正常工作

时间:2016-07-27 13:35:20

标签: php guzzle

所以我正在使用guzzleHttp,我可以得到我所追求的回复并发现错误。

我遇到的唯一问题是,如果基URI错误,整个脚本都会失败......我怎样才能进行某种检查以确保端点实际上已启动?

$client = new GuzzleHttp\Client(['base_uri' => $url]);

1 个答案:

答案 0 :(得分:0)

您的查询可能存在许多问题,而不仅仅是端点已关闭。服务器上的网络接口可以在查询时关闭,DNS可能会关闭,到主机的路径可能不可用,连接超时等等。

所以你绝对应该为许多问题做好准备。我通常会捕获一般RequestException并执行某些操作(日志记录,应用程序特定处理),如果我应该以不同方式处理它们,还要捕获特定的异常。

此外,还有许多用于错误处理的现有模式(和解决方案)。例如,通常重试查询是端点不可用。

$stack = HandlerStack::create();
$stack->push(Middleware::retry(
    function (
        $retries,
        RequestInterface $request,
        ResponseInterface $response = null,
        RequestException $exception = null
    ) {
        // Don't retry if we have run out of retries.
        if ($retries >= 5) {
            return false;
        }

        $shouldRetry = false;
        // Retry connection exceptions.
        if ($exception instanceof ConnectException) {
            $shouldRetry = true;
        }
        if ($response) {
            // Retry on server errors.
            if ($response->getStatusCode() >= 500) {
                $shouldRetry = true;
            }
        }

        // Log if we are retrying.
        if ($shouldRetry) {
            $this->logger->debug(
                sprintf(
                    'Retrying %s %s %s/5, %s',
                    $request->getMethod(),
                    $request->getUri(),
                    $retries + 1,
                    $response ? 'status code: ' . $response->getStatusCode() :
                        $exception->getMessage()
                )
            );
        }

        return $shouldRetry;
    }
));

$client = new Client([
    'handler' => $stack,
    'connect_timeout' => 60.0, // Seconds.
    'timeout' => 1800.0, // Seconds.
]);