Dag*_*Dag 6 qt qtwebkit qwebkit http-status-code-302 qt4.7
我们正在使用QtWebKit 4.7并想知道帧加载何时进行重定向.
目前我们在QNetworkAccessManager的子类中计算传出请求,我们在其中覆盖createRequest.
这在大多数情况下都很好用,但是当第一个响应是301或302(重定向)时,它会在某处被吞噬.
我们只需要通过以下方式请求网址:
QNetworkRequest request(QUrl("http://www.twitter.com")); // 301 to twitter.com
frame->load(request);
Run Code Online (Sandbox Code Playgroud)
自己处理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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用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);
Run Code Online (Sandbox Code Playgroud)