PHP:如何在Guzzle 4中检查超时异常?

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" 因此,我可以评估消息模式,但这感觉有点错误,因为这些消息在将来很容易更

如果请求期间发生错误,Guzzle将引发异常。不幸的是,似乎没有一个特定于超时的错误-这对我来说很重要,因为我知道这些可能会发生。我想重试相应的请求,并且需要能够判断错误是否是由于超时而发生的

从:

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();
});