如何用PyQt发送http请求?

2024-07-04 08:15:26 发布

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

我想用PyQt发送httpget请求。在

尽管我进行了研究,但我还没有在python中找到任何这种简单操作的例子。在

我最终得到了一些代码(我根据Bakuriu在评论中给出的提示修改了这些代码),但是它不起作用。假设我想向facebook网页发出get请求,并打印出答案,这应该是页面的HTML内容。在

from PyQt4 import QtCore, QtNetwork, QtCore, QtGui
from PyQt4.QtCore import *
import sys
from functools import partial

def printContent():
    answerAsText = QString(replyObject.readAll())
    print answerAsText 

app = QtCore.QCoreApplication(sys.argv)

url = QtCore.QUrl("http://www.facebook.com")
request = QtNetwork.QNetworkRequest()
request.setUrl(url)
manager = QtNetwork.QNetworkAccessManager()

replyObject = manager.get(request)
replyObject.finished.connect(printContent)

sys.exit(app.exec_())

这不会产生任何错误,只是不会打印任何内容。 我不知道问题出在哪里: 我的要求错了吗? 还是我处理回复对象的方式?在

为什么不管用?有人能给我看一个有效的代码吗?在


Tags: 代码fromimportapp内容getfacebookrequest
2条回答

我们需要创建一个QApplicationQtCoreApplication,因为我们使用的是信号和插槽机制。还请注意,响应必须从QByteArray解码。在

下面是一个工作示例:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtNetwork
import sys


class Example:

    def __init__(self):    

        self.doRequest()


    def doRequest(self):   

        url = "http://www.something.com"
        req = QtNetwork.QNetworkRequest(QtCore.QUrl(url))

        self.nam = QtNetwork.QNetworkAccessManager()
        self.nam.finished.connect(self.handleResponse)
        self.nam.get(req)    


    def handleResponse(self, reply):

        er = reply.error()

        if er == QtNetwork.QNetworkReply.NoError:

            bytes_string = reply.readAll()
            print(str(bytes_string, 'utf-8'))

        else:
            print("Error occured: ", er)
            print(reply.errorString())

        QtCore.QCoreApplication.quit()    


if __name__ == '__main__':       

    app = QtCore.QCoreApplication([])
    ex = Example()
    sys.exit(app.exec_())

如果您运行这个应用程序,您将得到一个非常简单的网页的HTML代码(www.something.com网站). 在

看起来URL示例不好。尝试www.google.com。我已经为PyQt5修改了你的代码。它起作用了。在

 from PyQt5.QtCore import QUrl
 from PyQt5.QtWidgets import QApplication, QMainWindow
 from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
 import sys

 def printContent():
     answerAsText = bytes(replyObject.readAll()).decode("utf-8")
     print(answerAsText)


 class mainClass():
     def my_exception_hook(exctype, value, traceback):

         print(exctype, value, traceback)

         sys._excepthook(exctype, value, traceback)
         sys.exit(1)

     sys.excepthook = my_exception_hook


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

     url = QUrl("http://www.google.com")

     request = QNetworkRequest()
     request.setUrl(url)
     manager = QNetworkAccessManager()

     replyObject = manager.get(request)
     replyObject.finished.connect(printContent)

     sys.exit(app.exec_())

相关问题 更多 >

    热门问题