我有一个Web查看,只希望它不仅能够访问我们的web应用,来实现这一点,我已经放在一个PHP的头,我期待在我的Qt应用程序。 这工作得很好,但有一个例外,这就是用301个永久移动状态代码。 现代浏览器重定向你自动但只是一个“/”在HTTP请求结束。
当输入一个URL给我们的web应用程序是当前需要的斜线,能够检测到的信息,但是我希望它也得到那个头,即使他们不把尾部斜杠。
这是我目前的检索方法标题:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(url);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
request.setRawHeader("User-Agent", "CytoViewer 1.0");
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/CytoViewer");
QNetworkReply *reply = manager->get(request);
reply->ignoreSslErrors();
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
qDebug() << "QLoop reply all: " << reply->readAll();
qDebug() << "QLoop: " << reply->rawHeader("Cyto-Study-Manager");
if(reply->rawHeader("OurWebApp") == "1"){
//Header exists?(QEventLoop finish) Set arg[1]"url 'Found prouct: product header'"
product = reply->rawHeader("Product");
return true;
} else {
//Header doen't exist? Graceful error - not a valid PI product
return false;
}
为了解决击中301的第一个问题,我送两个网络的要求,第一个打网址进入,并检查了301,如果有一个301个状态码得到它的VIA的建议的网址reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
方法并返回URL否则,如果没有状态代码,那么它只是返回先前的URL的用户输入,然后发送另一个网络请求,检查头。
首先要求我送出去检查状态代码:
QUrl MainWindow::networkRequest(QUrl checkUrl){
qDebug() << "checkURL: " << checkUrl;
//
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(checkUrl);
request.setRawHeader("User-Agent", "CytoViewer 1.0");
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/CytoViewer");
QNetworkReply *reply = manager->get(request);
reply->ignoreSslErrors();
QEventLoop checkLoop;
connect(reply, SIGNAL(finished()), &checkLoop, SLOT(quit()));
checkLoop.exec();
//Check status code
if (reply->error() == QNetworkReply::NoError) {
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(statusCode == 301) {
QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
return redirectUrl;
}else {
return checkUrl;
}
}
}
长话短说,我送两个网络请求,1)要检查301 2)要检查我们的应用程序标题。
反正有这样做的一个要求吗? 我错过了,它会自动做这种重定向的方法?
问候
弥敦道