2017-01-18 5 views
0

Ich programmiere ein Skript, mit dem der Benutzer ein Bild erneut herunterladen kann, um immer die neueste Version zu haben. Dies funktioniert gut für some static image I found on google. Aber wenn ich versuche, es zu benutzen auf a generated image oder another es gibt mir HTML-Code:QNetworkRequest für generierte Bilder

Error: 0 (Unknown error) 
Content-Type: text/html 
Content: <html> 
<head><title>302 Found</title></head> 
<body bgcolor="white"> 
<center><h1>302 Found</h1></center> 
<hr><center>nginx</center> 
</body> 
</html> 

Mein Code so weit:

def onNetworkReply(self, reply): 
    try: 
     print("Error: %s (%s)"%(reply.error(), reply.errorString())) 
     print("Content-Type: %s"%reply.header(QNetworkRequest.ContentTypeHeader)) 
     print("Content: %s"%reply.readAll()) 
     #if reply.header(QNetworkRequest.ContentTypeHeader) == "image/jpeg": 
     imgraw = reply.readAll()#.data()#.decode('utf-8') 
     temp_dir = gettempdir() 
     filename = self.generateAvatarFileName(self.schid) 
     tmp = path.join(temp_dir, filename) 
     fn = QFile(tmp) 
     fn.open(QIODevice.WriteOnly) 
     fn.write(imgraw) 
     fn.close 
     #with open(tmp, 'wb') as f: f.write(imgraw) 
     ts3lib.logMessage("Uploading %s as new avatar."%tmp, ts3defines.LogLevel.LogLevel_INFO, "PyTSon Script", 0) 
     self.uploadAvatar(self.schid, tmp, filename) 
    except: 
     from traceback import format_exc 
     try: ts3lib.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon Script", 0) 
     except: print(format_exc()) 
    reply.deleteLater() 

Antwort

3

HTTP-Antwort 302 Found ist URL Redirect-Status. Sie könnten die automatische Umleitung (QNetworkRequest :: FollowRedirectsAttribute) in QNetworkRequest aktivieren, wenn Sie Qt 5.6 oder neuer verwenden.

QString url("http://your/url/pic.png"); 
QNetworkRequest req(QUrl(url)); 
req.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); 

QNetworkRequest :: FollowRedirectsAttribute

Anfragen nur, Typ: QMetaType :: Bool (Standard: false) Gibt , ob die Network Access API automatisch eine HTTP Umleitungsantwort oder nicht folgen sollte. Derzeit sind Umleitungen, die unsicher sind, dass von "https" auf "http" -Protokoll umleitet, nicht erlaubt. (Dieser Wert in 5.6 eingeführt wurde.)

+1

Danke für den Tipp, werde ich versuchen, auf jeden Fall, dass und geben Sie das Häkchen, wenn es :) – Bluscream

+0

gearbeitet Was ist die einfachste Lösung/Abhilfe für Pre Qt 5.6? Ich verwende vorübergehend eine 32-Bit-Linux-Plattform, und da 5.5.1 die letzte Version ist, die Qt in einer binären Form für diese OS/Prozessor-Kombination bereitstellt, ist dies keine Lösung ohne ein vollständiges QT SDK-Build aus der Quelle. Leider bietet die Distribution, die ich habe (Devuan 1.0 "Jessie"), nur 5.3.2 an, das ist also noch älter und bietet keine vorgefertigte Lösung. 8- ( – SlySven

Verwandte Themen