私は、学ぶためにウェブサイトから情報を引き出す小さなプログラムを作成しています。具体的には、私はこのロトのウェブサイトからアーカイブされた当選番号を引き出そうとしています。ここでHTTP 301ステータスコードの処理方法は?
https://www.ohiolottery.com/WinningNumbers/KenoDrawings/KenoDrawingsArchive.aspx?date=01%2f01%2f2010
私は現在(プロファイルでQT += network
に)持っているコードです:
Retriever.h
#ifndef RETRIEVER_H
#define RETRIEVER_H
#include <QObject>
#include <QtNetwork>
#include <QDebug>
class Retriever : public QObject
{
Q_OBJECT
public:
explicit Retriever(QObject *parent = 0);
void fetch();
public slots:
void replyFinished(QNetworkReply* reply);
private:
QNetworkAccessManager* manager;
};
#endif // RETRIEVER_H
Retriever.cpp
#include "retriever.h"
Retriever::Retriever(QObject *parent) : QObject(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void Retriever::fetch()
{
QString stackoverflow = "http://stackoverflow.com";
QString lotto = "https://www.ohiolottery.com/WinningNumbers/KenoDrawings/KenoDrawingsArchive.aspx?date=01%2f01%2f2010";
manager->get(QNetworkRequest(QUrl(lotto)));
}
void Retriever::replyFinished(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError) qDebug() << "no error";
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << reply->url();
qDebug() << reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
qDebug() << statusCode;
if (reply->atEnd()) qDebug() << "already at end";
while (!reply->atEnd()) {
QByteArray data = reply->readLine();
QString::fromUtf8(data.data(), data.size());
QString str(data);
qDebug() << str;
}
}
私はstackoverflowでこれを実行し、それは正常に動作します。私は宝くじのウェブサイトでこれを実行したときしかし、私はqDebug
から次のような出力が得られます。
no error
QUrl("https://www.ohiolottery.com/WinningNumbers/KenoDrawings/KenoDrawingsArchive.aspx?date=01%2F01%2F2010")
QUrl("/mobile")
301
already at end
いくつかの問題があるようです。まず、エラーはありませんが、モバイルサイトだと思いますか?それから、コンテンツの終わりに既にあると思っています(私は301のステータスコードのためにそのことを仮定しています)。私はウェブサイトから情報を取得することに慣れていないので、このエラーに対処する方法がわかりません。私はウェブサイトから正確にURLをコピーしたので、そのリダイレクトの理由はわかりません。このエラーを解決するにはどうすればよいですか?具体的には、QNetworkAccessManager
に与える正しいURLを取得するにはどうすればよいですか?
私はこれを試しましたが、残念なことに同じ結果が出ました。私は初期化によって 'QNetworkRequest'に' QUrl'を設定することができなかったことにも気付きました。私はそれがクラス/構造体/共用体が欲しいと言っているエラーを持っています。私は 'QNetworkRequest :: setUrl'を使用しなければなりませんでした。 – Dillydill123
私は 'user-agent'を' 'Google Chrome ''に設定することで動作させることができました – Dillydill123