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

时间:2014-04-26 17:22:51

标签: python json httplib httplib2

我正在尝试创建一个jsonrpc2服务器,它将通过http接受json,处理数据并将json返回给请求客户端。

我是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 Method Not Allowed"我在服务器shell上看到调试信息

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'})

我看到服务器然后回显它的shell

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()

1 个答案:

答案 0 :(得分:0)

尝试优秀的套餐requests

我打算用Python中的http客户端做任何事情,我强烈建议学习requests - 它比Python中的任何其他http相关模块更容易学习和使用,对我来说它变成了当试验过http时,有点瑞士军刀。

如何使用if for JSON-RPC的示例如下: https://stackoverflow.com/a/8634905/346478