3

我正在创建一个 Go Google App Engine 应用程序,它将对比特币服务器进行 HTTP JSON RPC 调用。我让我的代码在 dev_appserver 上正常工作,但是当部署在 GAE 上时,代码似乎不起作用。我正在使用GitHub 上提供的库,并这样称呼它:

func GetInfo(id interface{})(map[string]interface{}, os.Error){
    resp, err:=httpjsonrpc.Call("user:pass@111.1.1.1:18332", "getinfo", id, nil)
    if err!=nil{
        log.Println(err)
        return resp, err
    }
    return resp, err
}

调用时应该给出:

map[proxy: keypoololdest:1.327368259e+09 blocks:45385 keypoolsize:101 connections:11 version:50200 difficulty:8.88353262 generate:false hashespersec:0 paytxfee:0 balance:0 genproclimit:-1 testnet:true errors:]

但是在 GAE 上调用该函数似乎会导致错误。代码的哪一部分可以在 dev_appserver 上运行,但在 GAE 上失败?

4

1 回答 1

3

您应该按照urlfetch 文档urlfetch.Transport中的说明在生产环境中使用 HTTP 调用。

而不是这样做

resp, err := http.Post(address,
    "application/json", strings.NewReader(string(data)))

你应该这样做:

client := urlfetch.Client(context)
resp, error := client.Post(address,
    "application/json", strings.NewReader(string(data)))

正如您在实现中看到的那样,urlfetch.Client它只是构造一个http.Client使用的快捷方式urlfetch.Transport

于 2012-01-31T12:16:10.700 回答