bitcoind が RPC に応答しない
bitcoind が時折 RPC に応答しなくなります。PHP から呼び出しており、以下のエラーが発生します:
Warning: fopen(http://127.0.0.1:8332) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error
ローカルの Windows マシンでは頻繁に発生し、Linux サーバーではそれほど頻繁ではありません。
同じ問題を経験した方はいますか?
奇妙だ。PHP から bitcoind をほぼ毎日使っているが、そんなことに遭遇したことがない。
正しく覚えていれば、500 は JSON-RPC のエラーレスポンスに規定されたステータスコードだ。応答のボディにはエラーの説明を含む JSON レスポンスがあり、例えば{“result”:"",“error”:“bitcoin address not found”,“id”:“1”}のようなものだ。
変だな。PHP の fopen()はレスポンスが 500 だと死ぬのだろうか?
無効なアドレスのようなエラーは通常のレスポンスとして、ただ「送信されていない」とすべきで、レスポンス文字列をチェックできるようにすべきだと思う。500 エラーはサーバー自体にエラーがある場合のものだと考えている。
HTTP 経由の JSON-RPC で、応答がエラーの場合にステータス 500 を使うべきかどうか、確認できる方はいるだろうか?どこでそれを知ったか思い出せず、間違っているかもしれない。HTTP リクエスト自体のメカニズムに問題がない限り、200 の方が理にかなっているように思える。(もしかしたら、そういう意味だったのに忘れて 500 をすべてのエラーレスポンスに適用してしまったのかもしれない)
1年後の今、私も同じ問題に遭遇している……
Windows 7 + 最新の bitcoin クライアント
これを使っている。https://en.bitcoin.it/wiki/PHP_developer_intro