Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send http request with PyQt?

I want to send http GET request using PyQt.

Despite my researches, I haven't found any examples of that simple manipulation in python.

I've ended up with some code (that I have modified according to the hints given by Bakuriu in the comments), but it doesn't work. Let's say I want to make a get request to facebook webpage, and print the answer, which should be the HTML content of the page.

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_())

This doesn't raise any error, it just doesn't print anything. I don't know where the problem is : Is my request wrong ? Or is it the way I handle the reply object afterwards ?

Why doesn't it work ? Could somebody please show me a functioning code ?

like image 788
El Theo Avatar asked Feb 22 '26 21:02

El Theo


1 Answers

We need to create a QApplication or QtCoreApplication, because we are using the signal and slot mechanism. Notice also that the response has to be decoded from a QByteArray.

Here is a working example:

#!/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_())

If you run this application, you will get the HTML code of a very simple web page.

like image 150
Jan Bodnar Avatar answered Feb 25 '26 11:02

Jan Bodnar