Skip to content

Commit

Permalink
Fix network redirect handling to be compatible for both Qt5 and Qt6
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn authored and nyalldawson committed Jan 24, 2025
1 parent 9a4f6e7 commit 5caa8db
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/core/network/qgsblockingnetworkrequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::doRequest( QgsBl

QgsDebugMsgLevel( QStringLiteral( "Calling: %1" ).arg( request.url().toString() ), 2 );

request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, forceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down Expand Up @@ -372,6 +373,7 @@ void QgsBlockingNetworkRequest::replyFinished()
return;
}

request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down
1 change: 1 addition & 0 deletions src/core/network/qgsnetworkcontentfetcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void QgsNetworkContentFetcher::fetchContent( const QUrl &url, const QString &aut
void QgsNetworkContentFetcher::fetchContent( const QNetworkRequest &r, const QString &authcfg )
{
QNetworkRequest request( r );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );

mAuthCfg = authcfg;
if ( !mAuthCfg.isEmpty() )
Expand Down
4 changes: 4 additions & 0 deletions src/core/providers/arcgis/qgsarcgisrestquery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -535,11 +535,13 @@ void QgsArcGisAsyncQuery::start( const QUrl &url, const QString &authCfg, QByteA
}

QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncQuery" ) );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
if ( allowCache )
{
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
}

mReply = QgsNetworkAccessManager::instance()->get( request );
connect( mReply, &QNetworkReply::finished, this, &QgsArcGisAsyncQuery::handleReply );
}
Expand All @@ -560,6 +562,7 @@ void QgsArcGisAsyncQuery::handleReply()
if ( !QgsVariantUtils::isNull( redirect ) )
{
QNetworkRequest request = mReply->request();
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncQuery" ) );
QgsDebugMsgLevel( "redirecting to " + redirect.toUrl().toString(), 2 );
request.setUrl( redirect.toUrl() );
Expand Down Expand Up @@ -633,6 +636,7 @@ void QgsArcGisAsyncParallelQuery::handleReply()
{
// Handle HTTP redirects
QNetworkRequest request = reply->request();
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncParallelQuery" ) );
QgsDebugMsgLevel( "redirecting to " + redirect.toUrl().toString(), 2 );
request.setUrl( redirect.toUrl() );
Expand Down
4 changes: 3 additions & 1 deletion src/core/qgstiledownloadmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ void QgsTileDownloadManagerWorker::queueUpdated()
QgsDebugMsgLevel( QStringLiteral( "Tile download manager: starting request: " ) + it->request.url().toString(), 2 );
// start entries which are not in progress

it->networkReply = QgsNetworkAccessManager::instance()->get( it->request );
QNetworkRequest request( it->request );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
it->networkReply = QgsNetworkAccessManager::instance()->get( request );
connect( it->networkReply, &QNetworkReply::finished, it->objWorker, &QgsTileDownloadManagerReplyWorkerObject::replyFinished );

++mManager->mStats.networkRequestsStarted;
Expand Down
2 changes: 2 additions & 0 deletions src/providers/arcgisrest/qgsamsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,7 @@ QgsAmsTiledImageDownloadHandler::QgsAmsTiledImageDownloadHandler( const QString
QgsMessageLog::logMessage( error, tr( "Network" ) );
continue;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( static_cast<QNetworkRequest::Attribute>( TileReqNo ), mTileReqNo );
Expand Down Expand Up @@ -1054,6 +1055,7 @@ void QgsAmsTiledImageDownloadHandler::tileReplyFinished()
// mErrors.append( error );
QgsMessageLog::logMessage( error, tr( "Network" ) );
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( static_cast<QNetworkRequest::Attribute>( TileReqNo ), tileReqNo );
Expand Down
2 changes: 2 additions & 0 deletions src/providers/wcs/qgswcscapabilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ bool QgsWcsCapabilities::sendRequest( QString const &url )
QgsMessageLog::logMessage( mError, tr( "WCS" ) );
return false;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mCacheLoadControl );
QgsDebugMsgLevel( QStringLiteral( "mCacheLoadControl = %1" ).arg( mCacheLoadControl ), 2 );
Expand Down Expand Up @@ -382,6 +383,7 @@ void QgsWcsCapabilities::capabilitiesReplyFinished()
QgsMessageLog::logMessage( mError, tr( "WCS" ) );
return;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down
2 changes: 2 additions & 0 deletions src/providers/wcs/qgswcsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1675,6 +1675,7 @@ QgsWcsDownloadHandler::QgsWcsDownloadHandler( const QUrl &url, QgsAuthorizationS
QgsMessageLog::logMessage( tr( "Network request update failed for authentication config" ), tr( "WCS" ) );
return;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, cacheLoadControl );

Expand Down Expand Up @@ -1718,6 +1719,7 @@ void QgsWcsDownloadHandler::cacheReplyFinished()

QgsDebugMsgLevel( QStringLiteral( "redirected getmap: %1" ).arg( redirect.toString() ), 2 );
QNetworkRequest request( redirect.toUrl() );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsDownloadHandler" ) );
if ( !mAuth.setAuthorization( request ) )
{
Expand Down
3 changes: 3 additions & 0 deletions src/providers/wfs/qgsbasenetworkrequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,8 @@ bool QgsBaseNetworkRequest::issueRequest( QNetworkRequest &request, const QByteA
bool threadFinished = false;
bool success = false;

request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );

const std::function<void()> downloaderFunction = [this, request, synchronous, data, &verb, &waitConditionMutex, &waitCondition, &threadFinished, &success]() {
if ( QThread::currentThread() != QApplication::instance()->thread() )
QgsNetworkAccessManager::instance( Qt::DirectConnection );
Expand Down Expand Up @@ -641,6 +643,7 @@ void QgsBaseNetworkRequest::replyFinished()
emit downloadFinished();
return;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down
2 changes: 2 additions & 0 deletions src/providers/wms/qgswmscapabilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2491,6 +2491,7 @@ bool QgsWmsCapabilitiesDownload::downloadCapabilities()
QgsMessageLog::logMessage( mError, tr( "WMS" ) );
return false;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down Expand Up @@ -2562,6 +2563,7 @@ void QgsWmsCapabilitiesDownload::capabilitiesReplyFinished()
emit downloadFinished();
return;
}
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down
13 changes: 11 additions & 2 deletions src/providers/wms/qgswmsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3289,6 +3289,7 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPointXY &point, Qgis:

QgsDebugMsgLevel( QStringLiteral( "getfeatureinfo: %1" ).arg( requestUrl.toString() ), 2 );
QNetworkRequest request( requestUrl );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsProvider" ) );
QgsSetRequestInitiatorId( request, QStringLiteral( "identify %1,%2" ).arg( point.x() ).arg( point.y() ) );
mSettings.authorization().setAuthorization( request );
Expand Down Expand Up @@ -3711,7 +3712,9 @@ void QgsWmsProvider::identifyReplyFinished()
mIdentifyReply->deleteLater();

QgsDebugMsgLevel( QStringLiteral( "redirected getfeatureinfo: %1" ).arg( redirect.toString() ), 2 );
mIdentifyReply = QgsNetworkAccessManager::instance()->get( QNetworkRequest( redirect.toUrl() ) );
QNetworkRequest request( redirect.toUrl() );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
mIdentifyReply = QgsNetworkAccessManager::instance()->get( request );
mSettings.authorization().setAuthorizationReply( mIdentifyReply );
mIdentifyReply->setProperty( "eventLoop", QVariant::fromValue( qobject_cast<QObject *>( loop ) ) );
connect( mIdentifyReply, &QNetworkReply::finished, this, &QgsWmsProvider::identifyReplyFinished );
Expand Down Expand Up @@ -4255,6 +4258,7 @@ QgsWmsImageDownloadHandler::QgsWmsImageDownloadHandler( const QString &providerU
}

QNetworkRequest request( url );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsImageDownloadHandler" ) );
auth.setAuthorization( request );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
Expand Down Expand Up @@ -4290,7 +4294,9 @@ void QgsWmsImageDownloadHandler::cacheReplyFinished()
mCacheReply->deleteLater();

QgsDebugMsgLevel( QStringLiteral( "redirected getmap: %1" ).arg( redirect.toString() ), 2 );
mCacheReply = QgsNetworkAccessManager::instance()->get( QNetworkRequest( redirect.toUrl() ) );
QNetworkRequest request( redirect.toUrl() );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
mCacheReply = QgsNetworkAccessManager::instance()->get( request );
connect( mCacheReply, &QNetworkReply::finished, this, &QgsWmsImageDownloadHandler::cacheReplyFinished );
return;
}
Expand Down Expand Up @@ -4423,6 +4429,7 @@ QgsWmsTiledImageDownloadHandler::QgsWmsTiledImageDownloadHandler( const QString
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsTiledImageDownloadHandler" ) );
auth.setAuthorization( request );
request.setRawHeader( "Accept", "*/*" );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( static_cast<QNetworkRequest::Attribute>( TileReqNo ), mTileReqNo );
Expand Down Expand Up @@ -4515,6 +4522,7 @@ void QgsWmsTiledImageDownloadHandler::tileReplyFinished()
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsTiledImageDownloadHandler" ) );
mAuth.setAuthorization( request );
request.setRawHeader( "Accept", "*/*" );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
request.setAttribute( static_cast<QNetworkRequest::Attribute>( TileReqNo ), tileReqNo );
Expand Down Expand Up @@ -4824,6 +4832,7 @@ void QgsWmsLegendDownloadHandler::startUrl( const QUrl &url )
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsLegendDownloadHandler" ) );
mSettings.authorization().setAuthorization( request );
request.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

Expand Down

0 comments on commit 5caa8db

Please sign in to comment.