如何处理致命错误:cURL错误7:无法连接到xxxx端口443

5
我有一个脚本连接到第三方API。它应该在非停循环24/7运行(我在重新启动循环之前使用了睡眠)。
问题是有时第三方API会被攻击或连接会出现错误,显示以下信息:
致命错误:未捕获的异常'GuzzleHttp\Ring\Exception\ConnectException',消息为'cURL error 7:无法连接到xxx.com端口443
是否有任何方法可以在这个致命错误上"中断",以确保代码被重新启动并且如果可以进行操作则继续进行,或者必须每次收到此错误时手动重新启动?

1
我们看不到你的代码,但是看起来你可以在try/catch中捕获GuzzleHttp\Ring\Exception\ConnectException异常,而不是让它致命退出。 - Michael Berkowski
嗨。问题表述得很好,我做了一些小改动来纠正一些语法错误并使其更加简单明了。欢迎来到SO! - Félix Adriyel Gagnon-Grenier
2个回答

6

来自迈克尔评论

看起来你可以捕获GuzzleHttp\Ring\Exception\ConnectException异常

像这样:

use GuzzleHttp\Ring\Exception\ConnectException;

try {
    // the code which throws the error
} catch( ConnectException $ex ) {
    switch ( $ex->getMessage() ) {
        case '7': // to be verified
            // handle your exception in the way you want,
            // maybe with a graceful fallback
            break;
    }
}

看起来 Guzzle 的 ConnectException 扩展一些 ,最终扩展了 PHP 的 Exception,因此您可以安全地使用 getCode() 方法,允许您捕获一个标识符,以便根据您的需求做出反应。


我应该在try块中放什么?这个“ConnectException”只应该在执行中断而不是致命错误时被调用。 - ace
只返回尝试连接API的那一行代码;也就是引发错误的那一行。这样,你的程序流程将按预期工作,只是尝试连接的那一行将被catch块中的内容替代。 - Félix Adriyel Gagnon-Grenier
我用这种方式无法成功。 - Tung Nguyen

0

如下所示,捕获 ConnectionException 异常:

use Illuminate\Http\Client\ConnectionException;
...
try {
    Http::get('<your url>');
}
catch (ConnectionException $e) {
   // Do something with $e for example Log::debug($e->getMessage());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接