2012-01-18 3 views
6

이동 중에 a simple JSON-RPC server for Bitcoin을 호출하기 위해 다양한 구성을 시도했지만 아무데도 관리하지 못했습니다. Go에서 JSON-RPC를 올바르게 호출하는 방법은 무엇입니까?

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

그러나 이동에

, 나는 "too many colons in address" 같이하는 오류에 부딪 치는 것 같다 없다, 또는 "그런 호스트"

파이썬, 전체 코드는 것 같습니다. 나는 두 가지 패키지 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를 사용할 지 여부, Dial이나 DialHTTP를 호출할지 여부와 같은 옵션을 확인하는 것과 같은 몇 가지 작업 코드를 유용하게 사용합니다. 시도하고 그들 모두를 조정할 수있는 옵션. – ThePiachu

+0

코드를 보여주세요! – Mostafa

답변

9

jsonrpc 패키지는 현재 HTTP를 통한 json-rpc를 지원하지 않습니다. 죄송합니다. 사용하실 수 없습니다.

그러나 jsonrpc specification은 매우 간단하며 자신의 jsonrpchttp (아, 더 나은 이름을 알고 싶습니다.) 패키지를 작성하는 것은 매우 쉽습니다.

나는 성공적으로 다음 (끔찍한) 코드를 사용하여 "GetInfo를"전화를 할 수 있었다 :
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) 
} 

어쩌면 당신이 rpc.ClientCodec 인터페이스 (예에 대한 jsonrpc/client.go 참조)를 구현하여 조금 그것을 청소 할 수 있습니다. 그런 다음 Go의 rpc 패키지를 이용할 수 있습니다.

+0

흠, "인코딩/json"을 "json"으로, "net/http"를 "http"로 약간 변경 한 오래된 수입이있는 것 같습니다. Asides that, 많이 고마워! 내 자신의 라이브러리를 작성하는 경우, 잘하고 싶습니다만, jsonrpc 패키지의 어디에 무엇이 있어야 하는지를 이해할 수 없다고 생각합니다. 아마도 몇 가지 repo를 시작해야하지만, 내가 볼 수 있듯이 같은 문제가있는 두 사람이 있습니다. – ThePiachu

+0

좋아, 초기 github 레포 최대입니다 - https://github.com/ThePiachu/Go-HTTP-JSON-RPC/ – ThePiachu

+0

지금은 최신 팁을 사용하고 있습니다. Go 1이 출시되면 곧 그 수입이 바뀔 것입니다. Btw, Go 문제 추적기에서 버그 보고서를 제출했지만 우선 순위가 "나중"으로 변경되었으므로 현재 별도의 패키지가 좋은 아이디어 일 수 있습니다. – tux21b

관련 문제