jsonRPCClient.php заявляет, что он получил ответ об ошибке 401

Когда я запускаю свой php-файл из командной строки, я получаю следующее:

<pre>
PHP Warning:  fopen(http://...@127.0.0.1:8332/): failed to open stream: HTTP request failed! HTTP/1.0 401 Authorization Required
 in /home/brian/Desktop/VH2_apache2/host02/btc16/jsonRPCClient.php on line 132
PHP Fatal error:  Uncaught exception 'Exception' with message 'Unable to connect to http://b:a@127.0.0.1:8332/' in /home/brian/Desktop/VH2_apache2/host02/btc16/jsonRPCClient.php:140
Stack trace:
#0 /home/brian/Desktop/VH2_apache2/host02/btc16/index1.php(12): jsonRPCClient->__call('getinfo', Array)
#1 /home/brian/Desktop/VH2_apache2/host02/btc16/index1.php(12): jsonRPCClient->getinfo()
#2 {main}
  thrown in /home/brian/Desktop/VH2_apache2/host02/btc16/jsonRPCClient.php on line 140

Мой файл php выглядит так:

<?php
  require_once 'jsonRPCClient.php';

  $bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/',true);
  #$param = array(
  #'c418518d5ffccd947e377ab7e589f684d83e6df1af8f397cc11848ac8a78f0dd',
  #'1');

  #$return1 = $bitcoin->getrawtransaction('c418518d5ffccd947e377ab7e589f684d83e6df1af8f397cc11848ac8a78f0dd','1')

  echo "<pre>\n";
  print_r($bitcoin->getinfo()); echo "\n";
  #print_r($return1['0']); echo "\n";
  #echo "Received: ".$bitcoin->getreceivedbylabel("Your Address")."\n";
  echo "</pre>";
?>

Моя веб-страница с apache2 выглядит пустой и использует созданный мной php-файл. Я использую параметр -txindex при запуске bitcoind.

Но я могу использовать bitcoin-cli для взаимодействия с bitcoind.

Iv'e used:
bitcoin-cli getrawtransaction c418518d5ffccd947e377ab7e589f684d83e6df1af8f397cc11848ac8a78f0dd 1

and:
bitcoin-cli getinfo

Также мой bitcoin.conf выглядит так:

rpcuser=user
rpcpassword=pass
txindex=1
server=1

Также обратите внимание, что я заменил имена пользователей и пароли, чтобы скрыть их.

Мой вопрос: почему я могу использовать биткойн-кли и не получить ошибку, но когда я пытаюсь использовать jsonRPCClient.php, я получаю сообщение об ошибке 401 Требуется авторизация и как мне исправить ошибку?

Ошибка 401 означает неверный логин/пароль. Я заметил, что пароль находится passв вашем файле конфигурации, и он находится passwordв вашем файле конфигурации. Отражает ли это содержимое ваших файлов config/php?
Нет, извините за путаницу, я заменил свой пароль и имя пользователя, указанные на этом форуме, чтобы обеспечить безопасность ядра биткойнов на моем компьютере. Пароль и имя пользователя, которые я использовал на своем компьютере, совпадают с теми, что указаны в файле конфигурации, и я проверял их много раз.
Я не знаю, что тебе сказать. Плохой пользователь/пароль вызывает ошибку.
Вы перезапускали свой клиент после того, как поместили имя пользователя и пароль в файл conf?
Я так думаю, я перезапустил свой php-скрипт и биткойн, и самое странное, что в какой-то момент это сработало.
Теперь я обнаружил, что это частично вызвано тем, что менеджер оружейного биткойн-кошелька оставался открытым в течение нескольких дней.

Ответы (3)

Я думаю, что это связано с этим открытым вопросом.

https://github.com/bitcoin/bitcoin/issues/9661

Я запускал биткойн на Ubuntu 16.

У меня была аналогичная проблема, когда у меня была rpcuserи rpcpasswordв файле конфигурации. Все, что я получил, это ошибка 401, когда я вызвал API jaon-rpc.

Я нашел обходной путь, -rpcuser=REPLACED -rpcpassword=REPLACEDуказав при запуске файла bitcoind.

Надеюсь, это полезно.

Еще одна вещь, вместо отладки вашего rpc-клиента в PHP. curlМожет быть, сначала попробовать . HTTP 401 явно является проблемой аутентификации, использование curlкоторой намного проще для отладки.

Убедитесь, что ваше имя пользователя и пароль RPC верны, а также убедитесь, что ваше имя пользователя и пароль не содержат тега (#).

Обязательно проверьте, какой bitcoin.confфайл конфигурации использует bitcoindдемон. Это явно показано при начальной загрузке.

Это может произойти, если вы измените путь установки биткойн-ядра по умолчанию при установке.

Таким образом, вам не нужно будет передавать user/pwd через cli при запуске службы.