Problem mit der Website mit QNetworkAccessManager Investing.com

Aug 25 2020

Ich versuche, mithilfe von QNetworkAccessManager automatisch einige Informationen voninvesting.com zu lesen. Ich kann von anderen Websites lesen, aber diese Website enthält einige Webmaster-Tools, auf die ich zugreifen möchte.https://www.investing.com/webmaster-tools/

Ich benutze diese Abfrage, die in einem Browser funktioniert. Hier ist mein Anforderungscode

class InvestingAPI: public QObject
{
    Q_OBJECT

    public:
       InvestingAPI();
       QueryTechnicals(QString Symbol, int TF1Minites);

    signals:
    //   void NewTechnicalSummary(int Timeframe, QString Symbol, QString Summary);
    private slots:
       void onData(QNetworkReply *reply);
    private:
      QNetworkAccessManager qnam ;

};

InvestingAPI::InvestingAPI()
{

connect (& qnam, SIGNAL (fertig (QNetworkReply *)), this, SLOT (onData (QNetworkReply *));

connect (& qnam, SIGNAL (verschlüsselt (QNetworkReply *)), this, SLOT (onData (QNetworkReply *)));

}

InvestingAPI::QueryTechnicals(QString Symbol, int TF1Minites)
{
QString Query;
Query = "http://ssltsw.forexprostools.com/index.php?timeframe=300&lang=1&forex=1&commodities=8830,8836,8831,8849,8833,8862,8832&indices=175,166,172,27,179,170,174&stocks=334,345,346,347,348,349,350&tabs=1,2,3,4%22%20width=%22317%22%20height=%22467%22%3E%3C/iframe%3E%3Cdiv%20class=%22poweredBy%22%20style=%22font-family:arial,helvetica,sans-serif;%20direction:ltr;%22%3E%3Cspan%20style=%22font-size:%2011px;color:%20&selectedTabId=QBS_1";

QNetworkRequest Request;
Request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
connect(&qnam,SIGNAL(finished(QNetworkReply*)),this,SLOT(onData(QNetworkReply*)));
Request.setUrl(QUrl(Query));

Request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
qnam.get(Request);
}

Und ich habe Veranstaltung

void InvestingAPI::onData(QNetworkReply *reply){
    // find data type
    // decode and return data to caller
    if(reply->error() != QNetworkReply::NoError){
        qDebug() << "Error";
        qDebug() << reply->errorString();
    }
    QString  html =  QString::fromUtf8(reply->readAll());
    qDebug() << html;
    QString SubData;
}

Ich erhalte keine Fehlermeldung, aber anstelle der HTML-Antwort erhalte ich eine leere Zeichenfolge.

Bitte helfen Sie, da ich keine Ahnung habe, warum dies hier nicht funktioniert, sondern im Browser.

Antworten

1 eyllanesc Aug 26 2020 at 04:54

Standardmäßig verarbeitet Qt Network Weiterleitungen nicht wie andere Tools. Aus diesem Grund erhalten Sie leere Daten (wenn Sie den Header "Standort" aktivieren, wird die umgeleitete URL angezeigt). In diesem Fall soll die Umleitung aktiviert werden:

Request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);