2014-04-26 27 views
1

我想創建一個jsonrpc2服務器,它將通過http接受json,處理數據並將json返回給請求客戶端。python jsonrpc2客戶端示例使用httplib連接到遠程hello世界示例?

我是rpc服務器和wsgi的新手,只是將它用作django之類的web框架的一部分。

我試圖按照jsonrpc2文檔給出的例子。第一步是創建一個文件hello.py

def greeting(name): 
    return dict(message="Hello, %s!" % name) 

下一步包括啓動服務

runjsonrpc2 hello 
runserver :8080 

我知道,因爲當我使用遠程計算機上的瀏覽器,瀏覽到該服務工作http://myip.dydns.org:8080,它與「405不允許的方法」,我看到在我的服務器外殼

DEBUG:root:jsonrpc 
DEBUG:root:check method 

調試信息的下一步是,我有一個很難理解什麼響應。我想知道如何創建一個python客戶端將json發送到服務並獲得響應。

我想的是:

>>> from httplib import HTTPConnection 
>>> h = HTTPConnection("myip.dydns.org:8080") 
>>> from json import JSONEncoder 
>>> call_values = {'jsonrpc':'2.0', 'method':'greeting', 'id':'greeting'} 

什麼是介入擺脫使用python web服務的響應的步驟。

不幸的是,jsonrpc2文檔只使用webtest庫中的TestApp來測試localhost。

我找不到任何示例python代碼從遠程計算機創建客戶端並獲取問候函數的響應。

有人可以幫助我開始。

編輯:我進一步了一點。但我仍然無法得到響應

>>> from httplib import HTTPConnection 
>>> con = HTTPConnection("myip.dyndns.org:8080") 
>>> import json 
>>> con.request('POST', '/', json.dumps({"jsonrpc": "2.0", "method": "casoff_jsonrpc2.greeting", "id":1.0,"params":{"name":"harijay"}},ensure_ascii=False).encode('utf-8'), {'Content-Type': 'application/json;charset=utf-8'}) 

我看到服務器的內容,然後回顯到它的外殼

DEBUG:root:jsonrpc 
DEBUG:root:check method 
DEBUG:root:check content-type 
DEBUG:root:response {"jsonrpc": "2.0", "id": 1.0, "result": {"message": "Hello, harijay!"}} 

但在客戶端上。我不知道如何得到結果。

EDIT2:我終於解決了這個

我所要做的就是

>>> con.getresponse().read() 

回答

0

嘗試優秀的包裝requests

我你打算做在Python HTTP客戶端什麼,我會強烈推薦學習requests - 這是一個比Python中任何其他http相關模塊更容易學習和使用的數量級,對我來說,它在通過http進行試驗時變成了瑞士軍刀。

的如果JSON-RPC如何使用實例是在這裏:我有請求庫相同的問題 https://stackoverflow.com/a/8634905/346478

+0

。我在我的服務器上得到以下內容:DEBUG:root:jsonrpc DEBUG:root:檢查方法 DEBUG:root:檢查內容類型 – harijay

+0

SO對於請求庫,我現在得到一個200響應消息「>>> r <響應[200]> >>> r.text u'{「jsonrpc」:「2.0」,「id」:null,「error」:{「message」:「Parse Error」,「code」 -32700}}'「 – harijay

+0

你幾乎在那裏。嘗試'r.json()'應該返回你需要的字典。 –