6

我们正在使用 QtWebKit 4.7 并且想知道帧加载何时进行重定向。

目前我们正在计算 QNetworkAccessManager 的子类中的传出请求,我们在其中覆盖 createRequest。

这在大多数情况下都可以正常工作,但是当第一个响应是 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 回答