私はwebviewerを持っていて、これを実現するために私たちのwebappにしかアクセスできないようにしたいと思っています。私は自分のQt Appで探しているPHPヘッダを入れました。これは正常に動作しますが、1つの例外を除いて、301の永続的な移動ステータスコードがあります。現代のブラウザーは自動的にあなたをリダイレクトしますが、http要求の最後に "/"を置きます。QNetworkReplyと301リダイレクト
WebアプリケーションのURLを入力すると、ヘッダーを検出できるようにスラッシュが必要ですが、末尾にスラッシュが付いていなくてもそのヘッダーに移動します。ここで
は、ヘッダ取得するために私の現在の方法である:私は2つのネットワーク要求を送信する最初の301を打つの問題を解決するには
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;
}
を、最初のものはURLが入力されヒットしている場合301をチェック301ステータスコードがあり、reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
メソッドを使用して提案されたURLを取得し、その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を確認するには、2つのネットワーク要求を送信しています。
これは1回のリクエストで実行できますか?このリダイレクトを自動的に行う方法がありませんか?
よろしく
ネイサン
私はどこかで何かが見つからなかったかどうかはわかりませんでした。@kfunkをクリアしてくれてありがとう: – Kal
公式HOWTOへのリンクが壊れています:( –
@DavidSánchez:コメントを更新しました残念ながら、wikiの内容は削除前に移動されていませんでした:( – kfunk