C - Internetseite einlesen

Windowsspezifische Probleme, WinAPI, conio.h
nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C - Internetseite einlesen

Beitrag von nufan » Fr Apr 23, 2010 1:37 pm

Hallo und willkommen im Forum :)
danibert hat geschrieben:@ nufan
...wie kann ich die Ausgabe der Webseite in eine Variable legen, um sie z.B. später in einem Label anzuzeigen? (Anstelle des textedit-Fensters)
Ich habe mit Deinem Beispiel experimentiert, bekomme das mit der Variable aber nicht zum Laufen.
Den Quellcode der Webseite hast du bereits in einer Variable. Er wird hier ausgelesen:

Code: Alles auswählen

void PageReader::WriteCode (QNetworkReply *reply)
{

  QByteArray data = reply -> readAll ();    // Quellcode einlesen

  emit ShowCode (QString (data));            // Signal mit Quellcode auslösen

}
Nun steht der Quellcode in "data". Danach wird der Code dem Signal mitgegeben und schließlich im QTextEdit angezeigt. Über Signale und Slots kannst du den Code natürlich an jedes beliebige von QObject abgeleitete Objekt (also auch QLabel) weitergeben.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C - Internetseite einlesen

Beitrag von Xin » Fr Apr 23, 2010 1:43 pm

Blöde Frage am Rande... wie sieht's eigentlich mit dem Qt Tut aus?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C - Internetseite einlesen

Beitrag von nufan » Fr Apr 23, 2010 1:48 pm

Xin hat geschrieben:Blöde Frage am Rande... wie sieht's eigentlich mit dem Qt Tut aus?
Hatte in den letzten paar Wochen leider recht wenig Zeit, aber nächste Woche sollte sich noch was ausgehen - versprochen :)
Ich muss mir die Strukturierung noch gut überlegen, denn so wie sie jetzt ist gefällt sie mir noch nicht wirklich.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C - Internetseite einlesen

Beitrag von Xin » Fr Apr 23, 2010 1:50 pm

nufan hat geschrieben:
Xin hat geschrieben:Blöde Frage am Rande... wie sieht's eigentlich mit dem Qt Tut aus?
Hatte in den letzten paar Wochen leider recht wenig Zeit, aber nächste Woche sollte sich noch was ausgehen - versprochen :)
Bitte nicht falsch verstehen - hier ist niemand zu irgendwas verpflichtet und wenn wichtigere Dinge da sind, dann kommen wichtigere Dinge.
Aber ich frage halt immer mal wieder nach, um die Dinge am Laufen zu halten, bzw. Feedback zu haben, wenn Dinge zum Stillstand kommen.

Aber ich freue mich auch nicht nur darüber, wenn mehr Tutorials im Wiki sind, sondern auch, wenn ich was Neues von proggen.org lernen kann.
nufan hat geschrieben:Ich muss mir die Strukturierung noch gut überlegen, denn so wie sie jetzt ist gefällt sie mir noch nicht wirklich.
Vieles entwickelt sich. Wenn ich die fehlenden Kapitel in C++ fertig habe, werde ich wohl auch wieder bei C loslegen und da einiges umstrukturieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

danibert
Beiträge: 5
Registriert: Fr Apr 23, 2010 8:51 am

Re: C - Internetseite einlesen

Beitrag von danibert » So Mai 02, 2010 4:11 pm

@nufan
Danke für die Erklärung. Eine Frage noch, nur aus Interesse: sow eit ich gesehen habe, kann man auf diesem Weg nicht über SSL auf Webseiteninhalte zugreifen. Ist das mit dem QNetworkAccessManager überhaupt möglich?
Wie könnte das Beispiel abgeändert werden, um eine SSL-Verbindung zu bewerkstelligen?

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C - Internetseite einlesen

Beitrag von nufan » So Mai 02, 2010 5:31 pm

danibert hat geschrieben:Danke für die Erklärung. Eine Frage noch, nur aus Interesse: sow eit ich gesehen habe, kann man auf diesem Weg nicht über SSL auf Webseiteninhalte zugreifen. Ist das mit dem QNetworkAccessManager überhaupt möglich?
Wie könnte das Beispiel abgeändert werden, um eine SSL-Verbindung zu bewerkstelligen?
Ich habs zwar noch nie verwendet aber HTTPS sollte mit QNetworkManager kein Problem sein. Wenn du wirklich mit der Seite interagieren willst solltest du dir get und post ansehen.
Eine einfache SSL-Verbindung kannst du mit QSslSocket erstellen. Nur musst du dann auch das darauf aufbauende Protokoll kennen.
Vielleicht kann ich dir besser helfen wenn du mir genau erklärst was du versuchst zu machen. :)

danibert
Beiträge: 5
Registriert: Fr Apr 23, 2010 8:51 am

Re: C - Internetseite einlesen

Beitrag von danibert » So Mai 02, 2010 6:16 pm

@nufan
...eigentlich nichts schwieriges (wenn man denn weiß, wie es geht :? )
Ich möchte meine Anwendung nach dem Start prüfen lassen, ob eine neuere Version verfügbar ist. Hierzu rufe ich die entsprechende Seite auf meinem Server auf:
https://meinedomain.de/index.php?version=1
Der Server prüft nun die übergebene Versionsnummer und sendet als Antwort 1 oder 0. In meiner Anwendung habe ich ein QStackedWidget, das ich auf den entsprechenden Index setze (entweder die Programmoberfläche oder eine Beschreibung, wo man das Update bekommt).
Die Anfrage muss über SSL laufen, ist leider eine Einschränkung seitens meines Serverbetreibers.....

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C - Internetseite einlesen

Beitrag von nufan » So Mai 02, 2010 6:48 pm

Ich kann das leider nicht testen, da ich keinen SSL-Server habe, würde das aber in etwa so versuchen:

Code: Alles auswählen

const int VERSION_ID = 0x123;        // Konstante für Version der gerade ausgeführten Anwendung

class MyApp : public QObject
{

  Q_OBJECT

  // ...

  private:
    QNetworkAccessManager *manager;
    QNetworkReply *serverreply;
    int stackwidgetindex;                         // gibt an welches Widget im QStackedWidget angezeigt wird
    void sendVersion ();                            // schickt vorhandene Version an den Server

  private slots:
    void checkCurrentVersion ();               // prüft Antwort des Servers und setzt Index des Widgets

};

// ...

void MyApp::sendVersion ()
{

  QByteArray version;
  version.setNum (VERSION_ID);     // Version in einen QByteArray schreiben

  // Version an Server schicken und Zeiger auf Antwort speichern
  serverreply = manager -> post (QNetworkRequest (https://meinedomain.de/index.php?version=1), version);  
  // Antwort des Servers prüfen, wenn er Daten schickt
  connect (serverreply, SIGNAL (finished ()), this, SLOT (checkCurrentVersion ()));

}


void MyApp::checkCurrentVersion ()
{

  stackwidgetindex = serverreply -> readAll ().toInt ();   // Server schickt den benötigten Index zurück
  // Antwort des Servers wird vor dem nächsten Eintritt in die Event-Schleife gelöscht (laut Doku wichtig)
  serverreply -> deleteLater ();

}
Achtung: Wie gesagt kann ich den Code nicht testen. Kann sein, dass er funktioniert, vielleicht auch nicht (was wahrscheinlicher ist ^^).

Antworten