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