2
嘗試聯繫txjsonrpc
服務器請求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()
客戶
curl -X POST http://127.0.0.1:7081 -d '{"params": [], "method": "status"}'
>>> '{"status": 200}'
這工作。
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
爲requests.post(data)
的參數是在客戶機#正確2例子。但是,如果我看看ngrep輸出,我可以看到params
正在被丟棄。
CSI:的ngrep
[email protected]:$ 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
正如你看到的,唯一的方法=狀態轉移。 requests
決定我的params
參數不值得發送,因爲它是空的。這會在txjsonrpc服務器上創建一個例外。
如何聯繫txjsonrpc
服務器與requests
客戶端請求?
另外;我不介意切換到另一個與Twisted兼容的jsonrpc服務器庫,如果這會讓我的生活更輕鬆。
謝謝,這確實解決了它。 – cpb2