Python jsonrpc2客户端示例,使用httplib连接远程hello world示例?

1 投票
1 回答
1398 浏览
提问于 2025-04-18 04:23

我正在尝试创建一个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

撰写回答