所以我正在使用guzzleHttp
,我可以得到我所追求的回复并发现错误。
我遇到的唯一问题是,如果基URI错误,整个脚本都会失败......我怎样才能进行某种检查以确保端点实际上已启动?
$client = new GuzzleHttp\Client(['base_uri' => $url]);
答案 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.
]);