6

私たちは QtWebKit 4.7 を使用しており、フレーム ロードがいつリダイレクトを行うかを知りたいと考えています。

現時点では、createRequest を上書きする QNetworkAccessManager のサブクラス内で発信リクエストをカウントしています。

これはほとんどの場合問題なく動作しますが、最初の応答が 301 または 302 (リダイレクト) の場合、どこかに飲み込まれます。

次の方法で URL をリクエストするだけです。

QNetworkRequest request(QUrl("http://www.twitter.com")); // 301 to twitter.com
frame->load(request);
4

2 に答える 2

8

QNetworkReply を自分で処理し、応答からステータス コードを取得して、QWebFrame::setcontent を実行します。

QNetworkRequest request(QUrl("http://www.twitter.com")); // 301 to twitter.com
connect (frame->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*), this, SLOT(onFinished(QNetworkReply*));
frame->page()->networkAccessManager()->get(request);

[...]

void onFinished(QNetworkReply* reply)
{
    if (reply->error() == QNetworkReply::NoError) {
        int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
        switch (statusCode) {
            case 301:
            case 302:
            case 307:
                qDebug() << "redirected: " << reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
                break;

            case 200:
                frame->setContent(reply->readAll());
                break;
        }
    }
}
于 2012-03-01T13:11:01.480 に答える
3

シグナルを使用してvoid QWebFrame::urlChanged ( const QUrl & url )URL の変更、つまりリダイレクトを検出します。

QNetworkRequest request(QUrl("http://www.twitter.com")); // 301 to twitter.com
connect(frame, SIGNAL(urlChanged (const QUrl&)), this, SLOT(onRedirected(const QUrl&));
frame->load(request);
于 2012-03-01T12:18:02.830 に答える