Ich mir in Qt4 eine kleine HTTP-Klasse gebaut, um mir in einem Programm, das oft gleichartige HTTP-Requests an den gleichen Host sendet, ein bisschen Code-Wiederholung zu sparen.
Das ganze sieht so aus:
http.h
Code: Alles auswählen
#ifndef HTTP_H
#define HTTP_H
#include <QHttp>
class QHttpRequestHeader;
class Http : public QHttp
{
Q_OBJECT
public:
Http(QObject *parent);
void setHeader(const QString &method, const QString &path, const QString &cookie);
void sendRequest();
private:
QHttpRequestHeader header;
};
#endif
Code: Alles auswählen
#include <QHttp>
#include <QHttpRequestHeader>
#include <QByteArray>
#include <QString>
#include "http.h"
Http::Http(QObject *parent = 0) : QHttp(parent) {}
void Http::setHeader(const QString &method, const QString &path, const QString &cookie = "")
{
header.setRequest(method, path);
header.setValue("Host", "www.host.de");
header.setValue("Content-type","application/x-www-form-urlencoded");
header.setValue("Keep-Alive", "300");
header.setValue("Connection", "keep-alive");
if (cookie!="")
{
header.setValue("Cookie", cookie);
}
}
void Http::sendRequest()
{
this->setHost("www.host.de");
this->request(header);
}
Code: Alles auswählen
MainWindow::MainWindow()
{
http = new Http(this);
connect(http, SIGNAL(done(bool)),this, SLOT(displayText(bool)));
...
}Sofort nach dem Starten des Programm wird die Funktion displayText() aufgerufen (Fenster geht auf, aber natürlich ohne Inhalt). Dann gibt man Daten ein, ein paar Requests werden gesendet, und das Fenster geht nochmal auf, diesmal mit Inhalt.
Wird die connect-Zeile auskommentiert, geht kein Fenster auf, auch nicht das erste gleich nach dem Programmstart.
Daraus schließe ich, dass die Klasse Http sofort beim konstruieren das Signal "done()" aussendet (bei "requestFinished" passiert übrigens das gleiche!).
Ich steh gerade ziemlich aufm Schlauch, warum darf ich im Konstruktor z.B. kein this->setHost() ausführen?
Danke schon mal im Voraus,
caligano