Inhalt einer URL abrufen

Alles rund um die Programmierung mit Qt
Antworten
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Inhalt einer URL abrufen

Beitrag von binio »

Hallo liebes QT-Forum,

ich versuche erfolglos den Inhalt einer URL anzuzeigen bzw. in ein QString zu drücken.

Code: Alles auswählen

Downloader_url d;
d.set_url("https://google.de");
QByteArray erg = d.get_erg();
QString erg_string = QString(erg);
qDebug()<<"ERG URL:"<<erg_string;
Downloader_url.cpp

Code: Alles auswählen

#include "Downloader_url.h"

Downloader_url::Downloader_url(QObject *parent) : QObject(parent){
}

void Downloader_url::doDownload(){
    qDebug()<<"Verarbeite Download einer URL: Step 1 "<<this->url;
    QNetworkAccessManager manager;

    qDebug()<<"Verarbeite Download einer URL: Step 2";
    QNetworkRequest request(QUrl(this->url));

    qDebug()<<"Verarbeite Download einer URL: Step 3";
    QNetworkReply *reply(manager.get(request));

    qDebug()<<"Verarbeite Download einer URL: Step 4";
    QEventLoop loop;

    qDebug()<<"Verarbeite Download einer URL: Step 5";
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    qDebug()<<"Verarbeite Download einer URL: Step 6";
    loop.exec();
    qDebug() << "Lese HEADER ZEILENWEISE START! URL: "<<this->url;
    qDebug() << "ContentTypeHeader:" << reply->header(QNetworkRequest::ContentTypeHeader).toString();
    qDebug() << "LastModifiedHeader:" << reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toString();
    qDebug() << "ContentLengthHeader" << reply->header(QNetworkRequest::ContentLengthHeader).toULongLong();
    qDebug() << "HttpStatusCodeAttribute" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    qDebug() << "HttpReasonPhraseAttribute" << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    qDebug() << "Lese HEADER ZEILENWEISE ENDE!";
    erg=reply->readAll();
    qDebug() << "WEBSITE INHALT:" << erg ;
}
Leider kommt immer ein leeres Ergebnis. Oder anders gesagt gehen einige Seiten damit einige sind leer. Google z.B. geht.
Hat jemand eine Idee wieso der manchmal einfach nichts zurückliefert ? Einmal ist die domaine die ich "scannen" will umgezogen und dann auch noch von Apache auf nginx. Seit dem Umzug geht mein quelltext nicht
Technik muss dem Menschen dienen, nicht umgekehrt
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: Inhalt einer URL abrufen

Beitrag von hilefoks »

Moin,

bei einer "umgezogenen" Seite ist der Body normalerweise tatsächlich leer. Die Antwort besteht dann nur aus einem HTTP Header und enthält dann typischerweise einen entsprechenden Statuscode (301, 302, ...) und den neuen Ort (Location).

Derartige Redirects folgt Qt nicht automatisch (zumindest nicht Qt5), man kann es aber einschalten:

Code: Alles auswählen

request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
Siehe auch: https://doc.qt.io/qt-5/qnetworkrequest. ... ibute-enum)

Es gibt aber auch HTML und JavaScript basierte Umleitungen. Diese zu unterstützen ist aber weitaus komplizierter.
Antworten