gpt4 book ai didi

pyqt4 - QtWebKit:控制每个http请求可以消耗的时间

转载 作者:行者123 更新时间:2023-12-01 09:45:39 26 4
gpt4 key购买 nike

QtWebKit中,有没有一种方法可以控制每个HTTP请求的超时时间?例如,如果我为每个 HTTP 请求设置 3 秒,如果 3 秒后请求未完成,则请求中止并开始其他请求。

我检查了 QNetworkAccessManager API 引用,但找不到合适的解决方案。

最佳答案

没有自定义超时的内置方法。有一个bug report那已经开放多年了。解决此问题的一种方法是使用您的请求启动自定义 QTimer 并将 timeout 信号连接到回复的 abort 方法。

一个简单的例子:

import sys
from PyQt4 import QtGui, QtCore, QtNetwork

class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)

self.output = QtGui.QPlainTextEdit()
# google won't respond to port 81, so it's a way to get timeout
self.url = QtGui.QLineEdit('http://www.google.com:81')
self.button = QtGui.QPushButton('Get')
self.button.clicked.connect(self.getPage)

navigateLayout = QtGui.QHBoxLayout()
navigateLayout.addWidget(self.url)
navigateLayout.addWidget(self.button)
layout = QtGui.QVBoxLayout()
layout.addLayout(navigateLayout)
layout.addWidget(self.output)
self.setLayout(layout)

self.manager = QtNetwork.QNetworkAccessManager(self)
# slot to process finished requests
self.manager.finished.connect(self.finished)

self.timeoutTimer = QtCore.QTimer()
# it only needs to fire once
self.timeoutTimer.setSingleShot(True)
# just to see that we aborted
self.timeoutTimer.timeout.connect(self.aborted)

def getPage(self):
url = QtCore.QUrl(self.url.text())
# request that page
# `reply` will be the QNetworkReply we'll get our data
reply = self.manager.get(QtNetwork.QNetworkRequest(url))

# set our timeout to abort request
self.timeoutTimer.timeout.connect(reply.abort)
# start timer (3000ms = 3s)
self.timeoutTimer.start(3000)

def finished(self, reply):
# everything went smoothly and we got our reply before timeout
# no need to abort now. so stop the timer
self.timeoutTimer.stop()

# do something interesting with the result
status = reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute).toString()
self.output.appendPlainText('finished (status code %s)' % status)

def aborted(self):
# timed out :(
self.output.appendPlainText('aborted')

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)

w = Window()
w.show()

sys.exit(app.exec_())

关于pyqt4 - QtWebKit:控制每个http请求可以消耗的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13063190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com