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をすべてのエラーレスポンスに適用してしまったのかもしれない)