(vessの引用投稿)
情報ありがとう、興味深いが、自分の問題とは違うようだ。
以下が現在のコードだ(Google App Engineで動作)
postdata = jsonrpc.dumps({“method”: ‘getbalance’, “params”:”,‘id’:‘jsonrpc’}) req = urllib2.Request(‘http://127.0.0.1:8332’, postdata) userpass = ‘user:a’.encode(‘base64’)[:-1] authheader = “Basic %s” % userpass req.add_header(“Authorization”,authheader) handle = urllib2.urlopen(req) json_response = handle.read() self.response.out.write (json_response)
これはHTTPError: HTTP Error 500: Internal Server Errorを返す。
GAEのローカルPythonスクリプトからだ。
以下を使っても postdata = jsonrpc.dumps([{“jsonrpc”: “2.0”,“method”: ‘getbalance’, “params”:”,‘id’:‘1’}])
同じ結果になる。
Quote from: vess on August 03, 2010, 06:02:00 PM
ポインタをありがとう。興味深いが、自分に影響しているものとは違うようだ。
これが現在のコードだ(Google App Engineで実行)
postdata = jsonrpc.dumps({“method”: ‘getbalance’, “params”:”,‘id’:‘jsonrpc’}) req = urllib2.Request(‘http://127.0.0.1:8332’, postdata) userpass = ‘user:a’.encode(‘base64’)[:-1] authheader = “Basic %s” % userpass req.add_header(“Authorization”,authheader) handle = urllib2.urlopen(req) json_response = handle.read() self.response.out.write (json_response)
これでHTTPError: HTTP Error 500: Internal Server Errorが出る。
これはbitcoinの確認済みバグだ。
bitcoinはContent-Lengthヘッダーを必要とするが、いくつかのJSON-RPCライブラリはそれを提供しない。Content-Lengthヘッダーがない場合、bitcoinは500 Internal Server Errorを返す。
Quote from: jgarzik on August 03, 2010, 06:09:08 PM
bitcoinはContent-Lengthヘッダーを必要とするが、いくつかのJSON-RPCライブラリはそれを提供しない。Content-Lengthヘッダーがない場合、bitcoinは500 Internal Server Errorを返す。
どのJSONライブラリがContent-Lengthを提供しないか、もう少し具体的に教えてもらえないか?ドキュメントに記載できると助かる。
Quote from: gavinandresen on August 03, 2010, 06:56:44 PM Quote from: jgarzik on August 03, 2010, 06:09:08 PM
bitcoinはContent-Lengthヘッダーを要求するが、いくつかのJSON-RPCライブラリはそれを提供しない。Content-Lengthヘッダーがない場合、bitcoinは500 Internal Server Errorを返す。
どのJSONライブラリがContent-Lengthを提供しないか、もう少し具体的にしてもらえるか?文書化しておくと良い。
CPAN(Perl)で利用可能な2つのJSON RPCライブラリと、動作を検証するために私がローカルで書いた準拠Cライブラリだ。
bitcoindのJSON-RPCで気づいた別の問題として、デフォルトでユーザーが設定されておらず、PHPのfopen()はユーザーが指定されていないと認証情報を送信しようとしない。
例えば、このURLは動作しない: しかしこちらは動作する:
PHPと連携させるために、ノードのbitcoin.confファイルに”rpcuser”を設定する必要があった。
こちらでも同じ問題に遭遇した:ユーザーが設定されていない場合にどのような認証文字列が受け入れられるべきかのドキュメントがない。
将来のバージョンではrpcuserとrpcpasswordを必須にするのが最善だと思う。これはHTTP Authで一般的に期待されていることだ。
Quote from: gavinandresen on August 03, 2010, 06:56:44 PM Quote from: jgarzik on August 03, 2010, 06:09:08 PM
bitcoinはContent-Lengthヘッダーを必要とするが、いくつかのJSON-RPCライブラリはそれを提供しない。Content-Lengthヘッダーがない場合、bitcoinは500 Internal Server Errorを返す。
Content-Lengthを提供しないJSONライブラリを具体的に教えてもらえますか? ドキュメント化できると良いのですが。 Content-Lengthパラメータがない場合のサポートを試みるべきだろう。ただし、ストリームを全面的に書き換えたくはない。1文字ずつ読む必要があっても構わない。
編集:つまり、Content-Lengthをサポートしないライブラリが実際にある場合の話だが。