2012-01-18 13 views
6

मैं गो में a simple JSON-RPC server for Bitcoin पर कॉल करने के लिए विभिन्न कॉन्फ़िगरेशन का प्रयास कर रहा हूं, लेकिन कहीं भी नहीं पहुंच पाया।गो में JSON-RPC को सही तरीके से कॉल करने के लिए कैसे करें?

अजगर में, पूरे कोड लगता है:

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

लेकिन गो में, मैं "too many colons in address" की तरह मिली त्रुटियाँ में जोड़ने से हो रहे हैं, या "ऐसी कोई मेजबान"। मैंने विभिन्न नेटवर्क पैरामीटर का उपयोग करके, डायल और डायल एचटीटीपी विधियों का उपयोग करके, दोनों संकुल आरपीसी और आरपीसी/जेसनआरपीसी का उपयोग करने का प्रयास किया है और अभी भी कहीं भी नहीं मिल सकता है।

तो, मैं गो में JSON-RPC सर्वर को ठीक से कैसे कॉल करूं?

+0

क्या यह आपकी समस्या का समाधान नहीं था? http://stackoverflow.com/questions/8854682/go-json-rpc-too-many-colons – thwd

+0

नहीं, जिसने मुझे लगता है कि समस्या का केवल एक हिस्सा हल किया है, मुझे अभी भी "ऐसा कोई होस्ट नहीं है" और अन्य लोगों की त्रुटि मिलती है मैंने कोशिश की कि कई अलग-अलग विन्यासों के आधार पर। यही कारण है कि मैं कुछ कामकाजी कोड की सराहना करता हूं, जैसे चेकिंग विकल्प जैसे पते में "http: //" डालना है, किस नेटवर्क का उपयोग करना है, आरपीसी या जेसनआरपीसी का उपयोग करना है या नहीं, डायल या डायल एचटीटीपी कॉल करने के लिए बहुत सारे तरीके पैदा करते हैं उन सभी को आजमाकर ट्विक करने के विकल्प। – ThePiachu

+0

हमें कोड दिखाएं! – Mostafa

उत्तर

9

jsonrpc पैकेज इस समय HTTP पर जेसन-आरपीसी का समर्थन नहीं करता है। तो, आप इसका उपयोग नहीं कर सकते, क्षमा करें।

लेकिन 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 देखें) को लागू करने से साफ कर सकते हैं। फिर आप गो के rpc पैकेज का लाभ उठा सकते हैं।

+0

हम्म, आपको लगता है कि कुछ पुराने आयात हैं जो थोड़ा सा बदलते हैं - "एन्कोडिंग/जेसन" से "जेसन" और "नेट/http" "http" में। इसके अलावा, बहुत बहुत धन्यवाद! अपनी खुद की लाइब्रेरी लिखने के लिए, ठीक है, मैं ऐसा करना चाहता हूं, लेकिन मुझे नहीं लगता कि मैं समझता हूं कि jsonrpc पैकेज में कहां जाना चाहिए। शायद कुछ रेपो शुरू हो जाना चाहिए, क्योंकि जैसा कि मैं देख सकता हूं कि दो लोगों को एक ही समस्या है। – ThePiachu

+0

ठीक है, प्रारंभिक जिथब रेपो ऊपर है - https://github.com/ThePiachu/Go-HTTP-JSON-RPC/ – ThePiachu

+0

मैं इस समय नवीनतम टिप का उपयोग कर रहा हूं। गो 1 जारी होने पर वे आयात जल्द ही बदल जाएंगे। बीटीडब्ल्यू, मैंने गो इश्यू ट्रैकर पर इसके लिए एक बग रिपोर्ट भी सबमिट की है, लेकिन प्राथमिकता को "बाद में" में बदल दिया गया था, इसलिए इस समय एक अलग पैकेज एक अच्छा विचार हो सकता है। – tux21b

संबंधित मुद्दे

 संबंधित मुद्दे