Python jsonrpc2客户端示例,使用httplib连接远程hello world示例?
我正在尝试创建一个jsonrpc2服务器,它可以通过http接收json数据,处理这些数据后再把json返回给请求的客户端。
我对rpc服务器和wsgi还很陌生,只在像django这样的网络框架中用过它。
我正在尝试按照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从网络服务获取响应的步骤有哪些。
可惜的是,jsonrpc2的文档只使用了webtest库中的TestApp在本地进行测试。
我找不到任何示例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!"}}
但是在客户端,我不知道如何获取结果。
编辑2:我终于解决了这个问题。
我所需要做的就是:
>>> con.getresponse().read()
1 个回答
0
试试优秀的包 requests
如果你打算在Python中做任何与HTTP客户端相关的事情,我强烈推荐你学习 requests
。这个库比Python中其他与HTTP相关的模块简单得多,学习和使用起来都容易得多。对我来说,它就像是一个瑞士军刀,特别适合在HTTP上进行各种实验。
关于如何在JSON-RPC中使用它的例子可以在这里找到: https://stackoverflow.com/a/8634905/346478