我想創建一個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()
。我在我的服務器上得到以下內容:DEBUG:root:jsonrpc DEBUG:root:檢查方法 DEBUG:root:檢查內容類型 – harijay
SO對於請求庫,我現在得到一個200響應消息「>>> r <響應[200]> >>> r.text u'{「jsonrpc」:「2.0」,「id」:null,「error」:{「message」:「Parse Error」,「code」 -32700}}'「 – harijay
你幾乎在那裏。嘗試'r.json()'應該返回你需要的字典。 –