Seite 1 von 1
[gelöst] Webseiten Quelltext auslesen
Verfasst: 28. Januar 2010 21:39
von HappyEnding
Hi,
evtl. kann mir hier jemand bei meinem Problem helfen.
Ich muss einen Wert von einer Webseite auslesen. Dabei handelt es sich um einen einzelnen String, der einfach nur die derzeitige Zeit des Servers im UNIX Format anzeigt.
Ich hab schon einiges mit QHttp versucht etc. aber komme einfach nicht zu dem gewünschten Ergebnis.
Waere genial wenn mir einer von euch helfen koennte. (wenn moeglich am liebsten mit CodeBeispiel, da tu ich mir am leichtesten)
Danke
HappyEnding
Verfasst: 28. Januar 2010 21:57
von Christian81
Und was ging bei QHttp nicht?
Verfasst: 28. Januar 2010 22:31
von HappyEnding
Die Seite ist:
http://julian.meetr.de/meetr/developers/gettimestamp
Liegt es daran, dass es keine absolute URL is, wie in der Doku beschrieben von QHttp::get() verlangt?
Und wenn ja, welche Alternativen gibt es denn um die Zeit irgendwie gelesen zu bekommen?
Danke
HappyEnding
Verfasst: 29. Januar 2010 06:56
von upsala
Wenn das keine absolute URL ist, wie sieht dann eine aus?
Und bevor das jetzt eine fröhliche Ratestunde wird, könntest du ja mal verraten was du eigentlich gemacht hast.
Verfasst: 29. Januar 2010 19:41
von HappyEnding
Ich hab es auf folgende Art probiert, welche aber nur zu einem Absturz des Programms fuehrt:
webtest.h:
Code: Alles auswählen
#ifndef WEBTEST_H
#define WEBTEST_H
#include <QtGui/QWidget>
#include <QHttp>
#include <QUrl>
#include <QHttpResponseHeader>
namespace Ui
{
class WebTest;
}
class WebTest : public QWidget
{
Q_OBJECT
public:
WebTest(QWidget *parent = 0);
~WebTest();
QHttp *http;
public slots:
void downloadFile();
void readFile(QHttpResponseHeader);
private:
Ui::WebTest *ui;
};
#endif // WEBTEST_H
webtest.cpp:
Code: Alles auswählen
#include "webtest.h"
#include "ui_webtest.h"
#include <qDebug>
WebTest::WebTest(QWidget *parent)
: QWidget(parent), ui(new Ui::WebTest)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(downloadFile()));
connect(http, SIGNAL(readyRead(QHttpResponseHeader)), this, SLOT(readFile(QHttpResponseHeader)));
}
WebTest::~WebTest()
{
delete ui;
}
void WebTest::downloadFile()
{
http = new QHttp;
qDebug() << "test";
http->get("http://julian.meetr.de/meetr/developers/gettimestamp");
}
void WebTest::readFile(QHttpResponseHeader resp)
{
QString set = http->readAll();
qDebug() << "text = " << set;
ui->lineEdit->setText(set);
}
Ich hoffe hier kann mir jemand helfen, ich habe naemlich totale Verstaendnisprobleme was diese Aufgabe angeht.
Danke fuer Eure Hilfe und sorry, dass ich anfangs so wenig Informationen gebracht habe.
Evtl hat einer von euch ja ein kleines Beisspiel wie es richtig gemacht gehoert.
mfg
HappyEnding
Verfasst: 29. Januar 2010 19:43
von Christian81
Erstens: was sagt der Debugger dazu?
Zweitens: wie soll ein connect funktionieren wenn Du einen uninitalisierten Pointer (http) übergibst?
Verfasst: 29. Januar 2010 19:51
von HappyEnding
Das mit dem uninitialisierten Pointer hab ich auch gerade nochmal bemerkt.
Ich habe das ganze jetzt in folgendes geaendert und seitdem laesst es sich auch starten, aber der SLOT wird nie aufgerufen, weil wohl das SIGNAL nie emitiert wird:
webtest.cpp:
Code: Alles auswählen
#include "webtest.h"
#include "ui_webtest.h"
#include <qDebug>
WebTest::WebTest(QWidget *parent)
: QWidget(parent), ui(new Ui::WebTest)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(downloadFile()));
}
WebTest::~WebTest()
{
delete ui;
}
void WebTest::downloadFile()
{
http = new QHttp;
qDebug() << "test";
http->get("http://julian.meetr.de/meetr/developers/gettimestamp");
connect(http, SIGNAL(readyRead(QHttpResponseHeader)), this, SLOT(readFile(QHttpResponseHeader)));
}
void WebTest::readFile(QHttpResponseHeader resp)
{
QString set = http->readAll();
qDebug() << "text = " << set;
ui->lineEdit->setText(set);
}
Danke fuer die schnelle Antwort.
mfg
HappyEnding
Verfasst: 29. Januar 2010 20:05
von Christian81
Ich würde auf requestFinished() connecten. Des weiteren gibt connect() zurück ob es erfolgreich war oder nicht.
Qt hat auch ein [url=
http://doc.trolltech.com/4.5/network-http.html]QHttp-Example[/ur] welches genau das macht ws Du möchtest.
Verfasst: 30. Januar 2010 13:11
von HappyEnding
Danke, ich werd das mal testen und schaun ob ich das zum laufen bekommen.
Danke fuer die schnelle Hilfe
mfg
HappyEnding
Verfasst: 30. Januar 2010 13:38
von phlox81
Kleiner Hinweis auf QNetworkManager.
Wenn du die QHttp Doku genau liest, wirst du sehen, das da direkt am Anfang steht:
This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
fyi.
phlox
Verfasst: 30. Januar 2010 14:03
von HappyEnding
Danke euch beiden.
Danke Christian81, fuer die Hinweise, die mich dazu gebracht haben, mal viel tiefer in diese ganze Materie zu schaun und danke an phlox, der mir einen sehr einfach Weg gezeigt hat, das ganze zu loesen, das naechste mal les ich die Doku gleich viel genauer.
Loesung:
Code: Alles auswählen
#include "webtest.h"
#include "ui_webtest.h"
#include <qDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
WebTest::WebTest(QWidget *parent)
: QWidget(parent), ui(new Ui::WebTest)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(downloadFile()));
}
WebTest::~WebTest()
{
delete ui;
}
void WebTest::downloadFile()
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://julian.meetr.de/meetr/developers/gettimestamp")));
}
void WebTest::replyFinished(QNetworkReply *reply)
{
QString set = reply->readAll();
qDebug() << "text = " << set;
ui->lineEdit->setText(set);
}
mfg
HappyEnding