带有请求客户端的txjsonrpc服务器

2024-05-16 16:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

试图从requests.post()请求联系txjsonrpc服务器。在

服务器

from txjsonrpc.web import jsonrpc
from twisted.web import server
from twisted.internet import reactor


class JsonRpc(jsonrpc.JSONRPC):
    def jsonrpc_status(self):
        return {"status": "200"}

reactor.listenTCP(interface="127.0.0.1", port=7081, factory=server.Site(JsonRpc()))
reactor.run()

客户

^{pr2}$

这很管用。在

python库requests不:

客户2

import requests

req = requests.post(
    url="http://127.0.0.1:7081",
    data={
        "params": [],
        "method": "status"
    })

print req.status_code
>>> 500

服务器发出错误:

  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
exceptions.ValueError: No JSON object could be decoded

在客户端2示例中,requests.post(data)的参数是正确的。但是,如果我查看ngrep输出,我可以看到params正在被丢弃。在

犯罪现场调查:ngrep

bla@bla:$ sudo ngrep -qt -W byline port 7081
interface: eth0 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( port 7081 )

T 2015/08/30 16:03:18.202439 192.168.1.30:41272 -> 192.168.1.61:7081 [AP]
POST / HTTP/1.1.
Host: 192.168.1.61:7081.
Content-Length: 13.
Content-Type: application/x-www-form-urlencoded.
Accept-Encoding: gzip, deflate, compress.
Accept: */*.
User-Agent: Mozilla 4.3.
.
method=status

如您所见,只有method=status被传输。requests决定我的params参数不值得发送,因为它是空的。这将在txjsonrpc服务器上创建一个异常。在

如何使用requests客户端请求联系txjsonrpc服务器?在

另外,我不介意切换到另一个与Twisted兼容的jsonrpc服务器库,如果这样可以让我的生活更轻松的话。在


Tags: fromimport服务器portusrstatusparamspost
1条回答
网友
1楼 · 发布于 2024-05-16 16:36:23

还请注意您来自requests的帖子并不像您的curl -d那样发送JSON,而是发送x-www-form-urlencoded的密钥/值对。尝试在您的requests.post调用中将data=替换为json=,如this example所示。在

相关问题 更多 >