[gelöst] Webseiten Quelltext auslesen

Alles rund um die Programmierung mit Qt
Antworten
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

[gelöst] Webseiten Quelltext auslesen

Beitrag 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
Zuletzt geändert von HappyEnding am 30. Januar 2010 14:03, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und was ging bei QHttp nicht?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erstens: was sagt der Debugger dazu?
Zweitens: wie soll ein connect funktionieren wenn Du einen uninitalisierten Pointer (http) übergibst?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag von HappyEnding »

Danke, ich werd das mal testen und schaun ob ich das zum laufen bekommen.

Danke fuer die schnelle Hilfe :)

mfg
HappyEnding
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag 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
HappyEnding
Beiträge: 26
Registriert: 5. März 2009 14:15

Beitrag 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
Antworten