PHP:如何在Guzzle 4中检查超时异常?
如果请求期间发生错误,Guzzle将引发异常。不幸的是,似乎没有一个特定于超时的错误-这对我来说很重要,因为我知道这些可能会发生。我想重试相应的请求,并且需要能够判断错误是否是由于超时而发生的 从:PHP:如何在Guzzle 4中检查超时异常?,php,exception,timeout,guzzle,Php,Exception,Timeout,Guzzle,如果请求期间发生错误,Guzzle将引发异常。不幸的是,似乎没有一个特定于超时的错误-这对我来说很重要,因为我知道这些可能会发生。我想重试相应的请求,并且需要能够判断错误是否是由于超时而发生的 从: RequestException在其消息属性中包含以下信息: "cURL error 28: Operation timed out after 3114 milliseconds with 0 bytes received" 因此,我可以评估消息模式,但这感觉有点错误,因为这些消息在将来很容易更
RequestException
在其消息
属性中包含以下信息:
"cURL error 28: Operation timed out after 3114 milliseconds with 0 bytes received"
因此,我可以评估消息模式,但这感觉有点错误,因为这些消息在将来很容易更改
使用guzzle 4时,是否有更好/更稳定的方法检查超时?此处生成了验证: 虽然这是一个私有函数,但您有两个选项:
- 克隆整个文件,给它一个新名称,用它代替CurlAdapter,并引发除“AdapterException”之外的另一个异常
- 编辑文件并抛出除“AdapterException”之外的另一个例外,但在这种情况下,您的Guzzle不再可维护
在您的情况下,这将输出
cURL error 28:操作在3114毫秒后超时,接收到0字节
,而不抛出RequestException
,我需要删除行$event->intercept(新响应(200))
这样就不会在null上调用成员函数getMessage()。在那之后我一直在工作。谢谢
"cURL error 28: Operation timed out after 3114 milliseconds with 0 bytes received"
private function handleError(
TransactionInterface $transaction,
$info,
$handle
) {
$error = curl_error($handle);
$this->releaseEasyHandle($handle);
RequestEvents::emitError(
$transaction,
new AdapterException("cURL error {$info['curl_result']}: {$error}"),
$info
);
}
use GuzzleHttp\Event\ErrorEvent;
use GuzzleHttp\Message\Response;
$client->getEmitter()->on('error', function(ErrorEvent $event) {
$event->stopPropagation();
$event->intercept(new Response(200));
echo $event->getException()->getMessage();
});