Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中正确调用JSON-RPC?_Json_Request_Go_Rpc_Json Rpc - Fatal编程技术网

如何在Go中正确调用JSON-RPC?

如何在Go中正确调用JSON-RPC?,json,request,go,rpc,json-rpc,Json,Request,Go,Rpc,Json Rpc,我一直在尝试各种配置以调用Go,但没有成功 在Python中,整个代码如下所示: from jsonrpc import ServiceProxy access = ServiceProxy("http://user:pass@127.0.0.1:8332") print access.getinfo() 但在围棋中,我似乎遇到了错误,比如“没有这样的主人”。我尝试过使用rpc和rpc/jsonrpc两个包,使用方法Dial和DialHTTP,使用各种网络参数,但仍然一无所获 那么,如何在Go

我一直在尝试各种配置以调用Go,但没有成功

在Python中,整个代码如下所示:

from jsonrpc import ServiceProxy
access = ServiceProxy("http://user:pass@127.0.0.1:8332")
print access.getinfo()
但在围棋中,我似乎遇到了错误,比如“没有这样的主人”。我尝试过使用rpc和rpc/jsonrpc两个包,使用方法Dial和DialHTTP,使用各种网络参数,但仍然一无所获

那么,如何在Go中正确地调用JSON-RPC服务器呢?

该包目前不支持HTTP上的JSON RPC。所以,你不能用那个,对不起

但是这个包非常简单,而且编写自己的
jsonrpchttp
(哦,我希望您知道一个更好的名称)包可能非常容易

我能够使用以下(可怕的)代码成功地调用“getinfo”:


也许您可以通过实现接口来清理它(参见示例)。然后你可以利用Go的套餐

这不是解决你问题的办法吗?不,这只解决了问题的一部分,我认为,我仍然会得到错误的“没有这样的主机”和其他取决于我尝试了许多不同的配置。这就是为什么我会喜欢一些工作代码,因为检查选项,例如是否在地址中放置“http://”,使用哪个网络,是否使用rpc或jsonrpc,是否调用拨号或拨号http会产生太多的选项,无法尝试和调整所有这些选项。嗯,您似乎有一些旧的导入将“encoding/json”更改为“json”,并且“net/http”到“http”“不用说了,非常感谢!至于编写我自己的库,我很想这样做,但我认为我不明白jsonrpc包应该放在哪里。也许应该启动一些回购协议,因为正如我所看到的,有几个人有同样的问题。我现在正在使用最新的提示。当Go 1发布后,这些进口将很快改变。顺便说一句,我也提交了一份关于这个即时问题跟踪器的bug报告,但是优先级被改为“稍后”,所以现在一个单独的包可能是个好主意。用服务器实现更新了代码。虽然我对rpc编解码器了解不多,但我的实现稍微基于http包(注册要为特定方法调用的函数,然后执行它们)。
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:secret@127.0.0.1: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)
}