PyQt:为什么sendind PATCH请求与JSON数据返回null-string?

时间:2017-05-14 11:35:02

标签: python json qt rest pyqt

我使用以下代码发送PATCH请求:

self.sendurl = QtCore.QUrl("http://"+ server + ":" + port + "/path/" + str(i['id']))
self.rdata = {'status': 'online'}
self.rdata = json.dumps(self.rdata)

self.request = QtNetwork.QNetworkRequest()
self.manager = QtNetwork.QNetworkAccessManager()
self.request.setUrl(self.sendurl)
self.request.setHeader(0, 'application/json')
self.rdata = bytes(self.rdata, 'UTF-8')
self.data = QtCore.QByteArray(self.rdata)

self.buffer = QtCore.QBuffer()

self.buffer.open(QtCore.QBuffer.ReadWrite)
self.buffer.writeData(self.data)
self.buffer.seek(0)

self.patchbytes = bytes('PATCH', 'UTF-8')
self.patchverb = QtCore.QByteArray(self.patchbytes)
self.response = QtCore.QByteArray()
self.response = self.manager.sendCustomRequest(self.request, self.patchverb, self.buffer)


self.response = self.response.readAll().data().decode('utf-8')
self.response = str(self.response)
print(self.response)
self.response = json.loads(self.response)

正常响应包含这样的JSON对象:{'status':'online', 'request':'ok'}。但我明白了:

我认为我发送的请求不正确,但我不明白它的错误。有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了问题的答案。我只需要等待请求完成。

此行之后

self.response = self.manager.sendCustomRequest(self.request, self.patchverb, self.buffer)

应该有这个代码:

self.loop = QtCore.QEventLoop()
self.manager.finished.connect(self.loop.exit)
self.loop.exec()