我正在尝试创建一个jsonrpc2服务器,该服务器将通过http接受json,处理数据并将json返回给发出请求的客户端。
我对rpc服务器和wsgi相当陌生,仅将其用作django这样的webframework的一部分。
我正在尝试遵循jsonrpc2文档中给出的示例。 第一步是创建一个文件hello.py
def greeting(name):
return dict(message="Hello, %s!" % name)
下一步涉及启动服务
runjsonrpc2 hello
runserver :8080
我知道该服务正在运行,因为当我在远程计算机上使用浏览器并浏览到http://myip.dydns.org:8080时 ,它将响应“ 405 Method Not Allowed”,并且我在服务器外壳上看到调试信息
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在本地主机上进行测试。
我找不到任何示例Python代码,这些示例Python代码可从远程计算机创建客户端并获得Greeting函数的响应。
有人可以帮助我入门。
编辑:我走得更远。 但是我仍然无法获得回复的内容
>>> 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()
requests
我打算对Python中的http客户端做任何事情,我强烈建议学习requests
-它比Python中的其他任何与HTTP相关的模块都易于学习和使用一个数量级,对我来说,它在实验时成为了瑞士军刀通过HTTP。
在JSON-RPC中使用if的示例在这里: https : //stackoverflow.com/a/8634905/346478