2012-01-18 19 views
6

私はGoでa simple JSON-RPC server for Bitcoinを呼び出すためにさまざまな設定を試してきましたが、どこにも取得できませんでした。 Pythonの、全体のコードでGoでJSON-RPCを正しく呼び出す方法は?

は、次のようになります。

from jsonrpc import ServiceProxy 
access = ServiceProxy("http://user:[email protected]:8332") 
print access.getinfo() 

しかし行くには、私が"too many colons in address"、または「いいえ、そのようなホスト」のようなerrosに衝突しているようです。私はrpcとrpc/jsonrpcの両方のパッケージを使って、DialとDialHTTPのメソッドを使い、いろいろなネットワークパラメータを使っていましたが、どこにもいられません。

したがって、GoでJSON-RPCサーバーを正しく呼び出すにはどうすればよいですか。

+0

これはあなたの問題に対する解決方法ではありませんか? http://stackoverflow.com/questions/8854682/go-json-rpc-too-many-colons – thwd

+0

いいえ、それは私が思っている問題の一部だけを解決した、私はまだ "そのようなホスト"と他のもの私が試した多くの異なる設定のどれに応じて。そのため、アドレスに "http://"を入れるか、rpcを使うか、jsonrpcを使うか、ダイヤルやDialHTTPを呼び出すかどうかはあまりにも多いそれらのすべてを試して調整するオプション。 – ThePiachu

+0

コードを見せてください! – Mostafa

答えて

9

jsonrpcパッケージは現時点でHTTP over json-rpcをサポートしていません。だから、あなたはそれを使用することはできません、ごめんなさい。

しかし、jsonrpc specificationは非常に簡単で、おそらくあなた自身のjsonrpchttp(ああ、私はあなたがより良い名前を知って欲しい)パッケージを書くのはかなり簡単です。

私は正常に、次の(恐ろしい)コードを使用「GETINFO」と呼ぶことができました:たぶん、あなたは(例えばjsonrpc/client.goを参照)rpc.ClientCodecインタフェースを実装することにより、少しそれをクリーンアップすることができます

package main 

import (
    "encoding/json" 
    "io/ioutil" 
    "log" 
    "net/http" 
    "strings" 
) 

func main() { 
    data, err := json.Marshal(map[string]interface{}{ 
     "method": "getinfo", 
     "id":  1, 
     "params": []interface{}{}, 
    }) 
    if err != nil { 
     log.Fatalf("Marshal: %v", err) 
    } 
    resp, err := http.Post("http://bob:[email protected]:8332", 
     "application/json", strings.NewReader(string(data))) 
    if err != nil { 
     log.Fatalf("Post: %v", err) 
    } 
    defer resp.Body.Close() 
    body, err := ioutil.ReadAll(resp.Body) 
    if err != nil { 
     log.Fatalf("ReadAll: %v", err) 
    } 
    result := make(map[string]interface{}) 
    err = json.Unmarshal(body, &result) 
    if err != nil { 
     log.Fatalf("Unmarshal: %v", err) 
    } 
    log.Println(result) 
} 

を。その後、Goのrpcパッケージを利用することができます。

+0

ええ、 "encoding/json"を "json"に、 "net/http"を "http"に少し変更した古いインポートがあるようです。 Asides、たくさんありがとう!私自身のライブラリを書くことについては、そうしたいと思いますが、私はjsonrpcパッケージのどこに行かなければならないのか分かりません。おそらく、いくつかのレポが始まったはずですが、同じ問題を抱えているカップルの人がいることがわかります。 – ThePiachu

+0

さて、最初のgithubレポはアップです - https://github.com/ThePiachu/Go-HTTP-JSON-RPC/ – ThePiachu

+0

私は現時点で最新のヒントを使用しています。これらの輸入品は、Go 1がリリースされるとすぐに変更されます。 Btw、私はGo問題トラッカーでこれについてバグレポートを提出しましたが、優先順位が "Later"に変更されたので、別のパッケージが現時点では良いアイデアかもしれません。 – tux21b

関連する問題