Seite 1 von 1

Inhalt einer URL abrufen

Verfasst: 10. Februar 2022 18:19
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

Re: Inhalt einer URL abrufen

Verfasst: 17. Februar 2022 10:42
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.