【问题标题】:catching GuzzleHttp \ Exception \ ConnectException and showing a custom message捕获 GuzzleHttp \ Exception \ ConnectException 并显示自定义消息
【发布时间】:2019-12-17 05:32:23
【问题描述】:

我无法解决此错误并向用户显示自定义消息, 我尝试将 web3js 与 laravel 一起使用 https://github.com/IlyasDeckers/web3php

当我尝试使用它时

      $eth = new \IlyasDeckers\Web3PHP\Ethereum(env('WEB3_URL'), env('WEB3_PORT'));
     try {
        $eth = $eth->eth_getBalance('0x8fbb99e9e73cd62bb3adea5365ff0f9d90c9e532', $block='latest', $decode_hex=false);
    }

    catch(ConnectException $e) {
    echo 'Message: ' .$e->getMessage();
    exit;
   }

我遇到了无法捕获的错误,有人可以帮忙吗?

GuzzleHttp\Exception\ConnectException cURL 错误 7: 失败 连接到 127.0.0.1 端口 8545:连接被拒绝(请参阅 http://curl.haxx.se/libcurl/c/libcurl-errors.html)

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    对我来说,这听起来很像您没有运行以太坊节点。它正在尝试连接到 localhost 的 8545 端口。

    如果您正在运行节点,请检查端口!

    如果您没有运行节点,请设置一个,或者找到一个可以让您连接的节点(不太可能)。

    更新

    我注意到您遇到了 ConnectException,完全限定的类名是 GuzzleHttp\Exception\ConnectException。

    如果您没有使用 use 语句导入类名,那么您需要将代码更改为:

    catch (\GuzzleHttp\Exception\ConnectException) {
    

    (注意前导反斜杠)。但是,这不是推荐的方式。最好在脚本顶部导入所有类:

    use GuzzleHttp\Exception\ConnectException;
    

    这样,您可以立即看到脚本中使用的所有类,并且您可以在整个代码中将类称为 ConnectException。

    【讨论】:

    • 是的,我需要用一条消息警告用户。
    • 将第一行放在 try 块中,从那里抛出异常
    • 实际上,它是下一行,当我只有第一行时,它并没有做太多初始化 $eth = new \IlyasDeckers\Web3PHP\Ethereum(env('WEB3_URL'), env ('WEB3_PORT')); print_r($eth);退出; //IlyasDeckers\Web3PHP\Ethereum Object ([host:protected] => 127.0.0.1 [port:protected] => 8545 [version:protected] => 2.0 [id:protected] => 0)
    • 您的脚本顶部有use GuzzleHttp\Exception\ConnectException; 吗?否则就不会被抓到。
    • 哇 :) 很遗憾,即使经过多年的 PHP 经验,我也不知道,非常感谢,你能把它添加到你的答案中吗?,所以我可以接受,它可能有用给未来的人..
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多