Problema com o site usando QNetworkAccessManager Investing.com

Aug 25 2020

Estou tentando ler automaticamente algumas informações de investing.com usando QNetworkAccessManager. Posso ler de outros sites, mas este site oferece algumas ferramentas para webmasters que desejo acessar.https://www.investing.com/webmaster-tools/

Eu uso essa consulta que funciona em um navegador. Aqui está o meu código de solicitação

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()
{

conectar (& qnam, SIGNAL (terminado (QNetworkReply *)), este, SLOT (onData (QNetworkReply *));

conectar (& qnam, SIGNAL (criptografado (QNetworkReply *)), este, 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);
}

E eu tenho evento

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;
}

Não recebo um erro, mas obtenho uma string vazia em vez da resposta html.

Por favor, ajudem, pois não tenho ideia de por que isso não está funcionando aqui, mas está funcionando no navegador.

Respostas

1 eyllanesc Aug 26 2020 at 04:54

Por padrão, a Rede Qt não lida com redirecionamentos como outras ferramentas, então é por isso que você obtém dados vazios (se você marcar o cabeçalho "Localização", verá a url redirecionada). Neste caso é para habilitar o redirecionamento:

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