HTTP-Request mit QT

cesupa

Erfahrenes Mitglied
Hallo,

ich versuche grade eine Datei mit Hilfe von QT und deren QHttp-Klasse herunterzuladen. Das kompilieren funktioniert einwandfrei jedoch erhalte ich immer einen Fehler. Hier erstmal der Code:

Code:
#include "HTTPH.h"
#include <iostream>
#include <QtGui>
using namespace std;

HTTPH::HTTPH(const QString& strurl,QWidget* parent):QObject(parent)
{
	url=new QUrl(strurl);
	http=new QHttp(this);
	file=new QFile(this);
	
	connect(http, SIGNAL(requestFinished(int, bool)),this, SLOT(httpRequestFinished(int, bool)));
}

HTTPH::~HTTPH()
{
	delete http;
	delete file;
	delete url;
}

void HTTPH::download(const QString& fn)
{
	file->setFileName(fn);
	file->open(QIODevice::WriteOnly);
	
	http->setHost(url->host());
	http->get(url->path(),file);
	
	file->close();
}

void HTTPH::httpRequestFinished(int id,bool error)
{
	cout<<"Host:\t"<<url->host().toAscii().constData()<<endl;
	cout<<"Path:\t"<<url->path().toAscii().constData()<<endl;
	
	cout<<"ID:\t"<<id<<endl;
	if(error)
		cout<<"ERROR:\t"<<http->error()<<" "<<http->errorString().toAscii().constData()<<endl;
}

Wenn ich jetzt die Funktion download() aufrufe, bekomme ich folgende Konsolenausgabe:

Host: http://www.trolltech.com
Path: /index.html
ID: 1
ERROR: 7 Request aborted

Kann mir jemand sagen, wieso der den Request abbricht?

Gruß
cesupa
 
Hi.

Das liegt daran, weil du ihm die Datei "unter'm Hintern weg ziehst". Die Operation get() blockiert nicht kehrt sofort zurück. Wenn dann irgendwas runtergeladen wird, wird nur festggestellt das die Datei geschlossen ist... Es ist erst in Ordnung die Datei zu schließen wenn das requestFinished() Signal gesendet wurde.

Gruß
 
Hallo,

also ich lass die Datei jetzt im httpRequestFinished()-Slot schließen, jedoch kommt der gleiche Fehler immer noch.

Gruß
cesupa
 
Okay, ich habs jetzt hingekiregt. Problem war, dass ich in der main ein neues Objekt meiner Klasse erstellte, die Anfrage gesendet habe und dann das Objekt wieder gelöscht habe. Tja, und da ja nichts blockiert....kann's ja nicht funktionieren:)
Danke, dass du mich daruaf gewissermaßen hingewiesen hast^^

Gruß
cesupa
 
Zurück