Re:(lachesisの文脈投稿)

参加者: lachesis

JSON-RPCパスワードスレッドでサトシがほのめかした、BitcoinのJSON-RPCにおけるいわゆる「Multiple Invocation」サポートに気づいた。

大量のアドレスへの支払いを1分に2回ポーリングするサイトを運営しているので、興味を引かれた。まず、これはJSON-RPC 2.0の「Batch」サポートとは違う。Batchではリクエストを配列で送信し、レスポンスも同様に受信する: Code:request = [ {“jsonrpc”: “2.0”, “method”: “sum”, “params”: [1,2,4], “id”: “1”}, {“jsonrpc”: “2.0”, “method”: “subtract”, “params”: [42,23], “id”: “2”}, {“jsonrpc”: “2.0”, “method”: “get_data”, “id”: “9”} ] response = [ {“jsonrpc”: “2.0”, “result”: 7, “id”: “1”}, {“jsonrpc”: “2.0”, “result”: 19, “id”: “2”}, {“jsonrpc”: “2.0”, “result”: [“hello”, 5], “id”: “9”} ]

代わりに別の方式で、Pythonでレスポンスをパースする方法が分からない。Bitcoin RPCサーバーへのtelnetセッションの画面キャプチャを示す: Code:$ telnet localhost 8332 Trying 127.0.0.1… Connected to localhost. Escape character is ’^]’. POST / HTTP/1.1 Content-Type: text/plain Content-Length: 97

{“params”:[],“id”:1,“method”:“getconnectioncount”} {“params”:[],“id”:2,“method”:“getdifficulty”} HTTP/1.1 200 OK Connection: close Content-Length: 33 Content-Type: application/json Date: Sat, 08 Jul 2006 12:04:08 GMT Server: json-rpc/1.0

{“result”:8,“error”:null,“id”:1} HTTP/1.1 200 OK Connection: close Content-Length: 49 Content-Type: application/json Date: Sat, 08 Jul 2006 12:04:08 GMT Server: json-rpc/1.0

{“result”:181.5432893640505,“error”:null,“id”:2} Connection closed by foreign host. 見ての通り、サーバーは(予想されるような)2行を連結した1つのレスポンスではなく、2つの完全なHTTP 200レスポンスを返す。

Pythonで半自動的にこれをパースする方法が分からない。urllib2もhttplibも最初のレスポンスの後に戻ってきて、2つ目を捨ててしまう。

この問題に遭遇した人はいるだろうか?この奇妙なマルチリクエスト動作を処理できるPythonライブラリを知っている人は?