web3.js как выполнять запросы POST?

Прочитав документацию здесь и здесь, я попробовал запустить скрипт проверки баланса отсюда . Я изменил путь к исходным файлам, и мой код выглядит так (я скачал все зависимости javascript в текущем рабочем каталоге):

<!doctype>
<html>

<head>
<script type="text/javascript" src="./bignumber.js/bignumber.min.js"></script> 
<script type="text/javascript" src="./web3.js/dist/web3.js"></script>
<script type="text/javascript">

    var Web3 = require('web3');
    var web3 = new Web3();
    web3.setProvider(new web3.providers.HttpProvider("http://127.0.0.1:8000"));
    function watchBalance() {
        var coinbase = web3.eth.coinbase;
        var originalBalance = web3.eth.getBalance(coinbase).toNumber();
        document.getElementById('coinbase').innerText = 'coinbase: ' + coinbase;
        document.getElementById('original').innerText = ' original balance: ' + originalBalance + '    watching...';
        web3.eth.filter('latest').watch(function() {
            var currentBalance = web3.eth.getBalance(coinbase).toNumber();
            document.getElementById("current").innerText = 'current: ' + currentBalance;
            document.getElementById("diff").innerText = 'diff:    ' + (currentBalance - originalBalance);
        });
    }
</script>
</head>
<body>
    <h1>coinbase balance</h1>
    <button type="button" onClick="watchBalance();">watch balance</button>
    <div></div>
    <div id="coinbase"></div>
    <div id="original"></div>
    <div id="current"></div>
    <div id="diff"></div>
</body>
</html>

Я запускаю экземпляр http-сервера, используя SimpleHTTPServer Python:

python -m SimpleHTTPServer

Узел, к которому я подключаюсь, работает как узел начальной загрузки:

pyethapp -c eth.network_id=1337 -c jsonrpc.corsdomain='http://localhost:8000' --data-dir BootstrapDir -c node.privkey_hex=091bd6067cb4612df85d9c1ff85cc47f259ced4d4cd99816b14f35650f59c322 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@127.0.0.1:29873' -c eth.genesis=CustomGenesis.json -m 100 run

Когда я отлаживаю скрипт в Chrome, я получаю следующие ошибки:

    httpprovider.js:77 POST http://127.0.0.1:8000/ 501 
(Unsupported method ('POST'))
HttpProvider.send @ 
httpprovider.js:77RequestManager.send @ 
requestmanager.js:58get @ 
property.js:107watchBalance @ 
balance.html:14onclick @ 
balance.html:28

    errors.js:35 Uncaught Error: Invalid JSON RPC response: "
<head>\n<title>Error response</title>\n</head>\n<body>\n<h1>Error response</h1>\n<p>Error code 501.\n<p>Message: Unsupported method ('POST').\n<p>Error code explanation: 501 = Server does not support this operation.\n</body>\n"
InvalidResponse @ 
errors.js:35HttpProvider.send @ 
httpprovider.js:87RequestManager.send @ 
requestmanager.js:58get @ 
property.js:107watchBalance @ 
balance.html:14onclick @ 
balance.html:28

Есть ли решение этой проблемы?

Ответы (1)

Я нашел проблему; это было связано с SimpleHTTPServer . Я сейчас использую апач. Я настроил apache для прослушивания порта, отличного от порта по умолчанию, отредактировав port.conf :

# find / -name *conf | grep apache
/etc/apache2/mods-available/dnssd.conf
/etc/apache2/mods-available/dir.conf
/etc/apache2/mods-available/autoindex.conf
/etc/apache2/mods-available/mpm_worker.conf
/etc/apache2/mods-available/cgid.conf
/etc/apache2/mods-available/mime_magic.conf
/etc/apache2/mods-available/ssl.conf
/etc/apache2/mods-available/fcgid.conf
/etc/apache2/mods-available/alias.conf
/etc/apache2/mods-available/mime.conf
/etc/apache2/mods-available/php5.conf
/etc/apache2/mods-available/dav_fs.conf
/etc/apache2/mods-available/status.conf
/etc/apache2/mods-available/proxy_ftp.conf
/etc/apache2/mods-available/actions.conf
/etc/apache2/mods-available/proxy_balancer.conf
/etc/apache2/mods-available/userdir.conf
/etc/apache2/mods-available/cache_disk.conf
/etc/apache2/mods-available/info.conf
/etc/apache2/mods-available/deflate.conf
/etc/apache2/mods-available/setenvif.conf
/etc/apache2/mods-available/ldap.conf
/etc/apache2/mods-available/mpm_event.conf
/etc/apache2/mods-available/mpm_prefork.conf
/etc/apache2/mods-available/proxy.conf
/etc/apache2/mods-available/negotiation.conf
/etc/apache2/mods-available/reqtimeout.conf
/etc/apache2/conf-enabled/other-vhosts-access-log.conf
/etc/apache2/conf-enabled/serve-cgi-bin.conf
/etc/apache2/conf-enabled/security.conf
/etc/apache2/conf-enabled/charset.conf
/etc/apache2/conf-enabled/localized-error-pages.conf
/etc/apache2/conf-enabled/apache2-doc.conf
/etc/apache2/mods-enabled/dir.conf
/etc/apache2/mods-enabled/autoindex.conf
/etc/apache2/mods-enabled/fcgid.conf
/etc/apache2/mods-enabled/alias.conf
/etc/apache2/mods-enabled/mime.conf
/etc/apache2/mods-enabled/php5.conf
/etc/apache2/mods-enabled/status.conf
/etc/apache2/mods-enabled/deflate.conf
/etc/apache2/mods-enabled/setenvif.conf
/etc/apache2/mods-enabled/mpm_prefork.conf
/etc/apache2/mods-enabled/negotiation.conf
/etc/apache2/conf-available/other-vhosts-access-log.conf
/etc/apache2/conf-available/php5-cgi.conf
/etc/apache2/conf-available/serve-cgi-bin.conf
/etc/apache2/conf-available/security.conf
/etc/apache2/conf-available/javascript-common.conf
/etc/apache2/conf-available/charset.conf
/etc/apache2/conf-available/localized-error-pages.conf
/etc/apache2/conf-available/apache2-doc.conf
/etc/apache2/sites-available/default-ssl.conf
/etc/apache2/sites-available/000-default.conf
/etc/apache2/ports.conf
/etc/apache2/apache2.conf
/etc/apache2/sites-enabled/000-default.conf

Установите нестандартный порт для apache:

vim /etc/apache2/ports.conf
Listen 8000

Перезапустите апач (в дебиане):

sudo service apache2 restart

И скопируйте html-файл вместе с зависимостями javascript в корень веб-сайта:

sudo cp -r ethreum_js/ /var/www/html

Вы также можете создать виртуальный хост для тестирования функциональности web3.js.