【问题标题】:electrum wallet jsonRPC authentication电子钱包jsonRPC认证
【发布时间】:2018-02-25 17:01:13
【问题描述】:

我正在尝试使用电子 rpc,它给了我身份验证错误。我已经尝试通过 Linux bash 和 php 上的基本身份验证进行用户传递,但它们都不起作用。

在 plectrum 漏洞升级之前,我的 php 代码运行良好。我也在 bash 上尝试过 curl ,但我得到了同样的错误

Error code explanation: 401 - No permission -- see authorization schemes.

我试过了

curl --data-binary '{"id":"curltext","method":"listaddresses","params":{"funded":true}}' http://test:abc@127.0.0.1:7777

curl --data-binary '{"id":"curltext","method":"listaddresses","params":{"funded":true}}' http://127.0.0.1:7777

curl -utest http://127.0.0.1:7777

但电子服务器从不接受任何身份验证。

我也尝试过禁用 rpc 身份验证,但仍然遇到同样的错误

【问题讨论】:

    标签: bitcoin json-rpc


    【解决方案1】:

    您必须使用适当的 curl 参数来使用 basic authentication

    引用手册的相关部分:

    6.1 基本认证

    HTTP 身份验证能够告诉服务器您的用户名和密码,以便它可以验证您是否被允许执行您正在执行的请求。 HTTP 中使用的基本身份验证(这是 curl 默认使用的类型)是基于 plain text 的,这意味着它发送的用户名和密码只是稍微混淆,但仍然完全可读任何人在您和远程服务器之间的网络上嗅探。

    告诉 curl 使用用户名和密码进行身份验证:

    curl --user name:password http://www.example.com
    

    因此,在终端中,您的命令应该像这样开始:

    curl --user RPCusername:RPCpassword http://127.0.0.1:7777 …
    

    并且(作为奖励)在 PHP 中,它看起来像这样:

    <?php
    $RPCusername = 'test';
    $RPCpassword = 'abc';
    $somefundedBTCaddress = '1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, $RPCusername.':'.$RPCpassword);
    curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:7777'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, '{"id":"curltext","method":"getaddressbalance","params":{"address":"'.$somefundedBTCaddress.'"}}'); 
    curl_setopt($ch, CURLOPT_POST, 1);
    
    $headers = array(); 
    $headers[] = "Content-Type: application/x-www-form-urlencoded"; 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($ch); 
    if (curl_errno($ch)) 
    { 
        echo 'Error:'.curl_error($ch).PHP_EOL; 
    } 
    else 
    {
        $result =json_decode($result,true);
        echo($result['result']['confirmed'].PHP_EOL);
        echo($result['result']['unconfirmed'].PHP_EOL);
    }
    curl_close ($ch);
    exit();
    

    【讨论】:

      【解决方案2】:

      您还可以使用其他传递用户和密码的模式来 curl,例如:

      curl --data-binary '{"params": {"amount": 0.0021651117760957575, "expiration": 1212}, "method": "addrequest", "id": "c6cf406e-0c4b-4eb7-b3d2-1712a4d3a553"}' http://user:LMt2FDyG-c543kc23H-NA==@10.78.1.1:7049
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-28
        • 1970-01-01
        • 2019-12-26
        • 2013-06-11
        • 2014-04-13
        • 2023-03-05
        • 2013-06-23
        • 2012-07-03
        相关资源
        最近更新 更多