如何使用PyQt发送http请求?

El *_*heo 2 python https qt http pyqt

我想使用 PyQt 发送 http GET 请求。

尽管我进行了研究,但我还没有找到任何在 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_())
Run Code Online (Sandbox Code Playgroud)

这不会引发任何错误,只是不打印任何内容。我不知道问题出在哪里:我的请求是否错误?或者这是我之后处理回复对象的方式?

为什么不起作用?有人可以给我看一个有效的代码吗?

Jan*_*nar 5

我们需要创建一个QApplicationor QtCoreApplication,因为我们正在使用信号和槽机制。另请注意,响应必须从QByteArray.

这是一个工作示例:

#!/usr/bin/python

from PyQt5 import QtCore, QtGui, QtNetwork
import sys
      
      
class Example:
  
    def __init__(self):    
        
        self.doRequest()
        
        
    def doRequest(self):   
    
        url = "http://webcode.me"
        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_())
Run Code Online (Sandbox Code Playgroud)

如果运行这个应用程序,您将获得一个非常简单的网页的 HTML 代码。