Add custom QNetworkRequest::Attributes for initiator network request class name and internal id

And allow these to be retrieved from QgsNetworkRequestParameters.
This allows logging code to identify the area of code where a request
originated from, making debugging much easier!

Tag all requests created with appropriate class name and IDs
This commit is contained in:
Nyall Dawson 2019-01-25 11:00:50 +10:00
parent a491e90a04
commit ca06d407a0
20 changed files with 121 additions and 7 deletions

View File

@ -10,6 +10,7 @@
class QgsNetworkRequestParameters
{
%Docstring
@ -23,6 +24,12 @@ Encapsulates parameters and properties of a network request.
%End
public:
enum RequestAttributes
{
AttributeInitiatorClass,
AttributeInitiatorRequestId,
};
QgsNetworkRequestParameters();
%Docstring
Default constructor.
@ -64,6 +71,27 @@ Returns a unique ID identifying the request.
%Docstring
Returns the request's content. This is only used for POST or PUT operation
requests.
%End
QString initiatorClassName() const;
%Docstring
Returns the class name of the object which initiated this request.
This is only available for QNetworkRequests which have had the
QgsNetworkRequestParameters.AttributeInitiatorClass attribute set.
.. seealso:: :py:func:`initiatorRequestId`
%End
QVariant initiatorRequestId() const;
%Docstring
Returns the internal ID used by the object which initiated this request to identify
individual requests.
This is only available for QNetworkRequests which have had the
QgsNetworkRequestParameters.AttributeInitiatorRequestId attribute set.
.. seealso:: :py:func:`initiatorClassName`
%End
};

View File

@ -32,7 +32,7 @@ from qgis.PyQt.QtWidgets import QApplication, QDialog, QDialogButtonBox, QFrame,
from qgis.PyQt.QtNetwork import QNetworkRequest
import qgis
from qgis.core import Qgis, QgsApplication, QgsNetworkAccessManager, QgsSettings
from qgis.core import Qgis, QgsApplication, QgsNetworkAccessManager, QgsSettings, QgsNetworkRequestParameters
from qgis.gui import QgsMessageBar, QgsPasswordLineEdit
from qgis.utils import (iface, startPlugin, unloadPlugin, loadPlugin,
reloadPlugin, updateAvailablePlugins)
@ -527,6 +527,8 @@ class QgsPluginInstaller(QObject):
url = "http://plugins.qgis.org/plugins/RPC2/"
params = {"id": "djangorpc", "method": "plugin.vote", "params": [str(plugin_id), str(vote)]}
req = QNetworkRequest(QUrl(url))
req.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "QgsPluginInstaller")
req.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorRequestId), "sendVote")
req.setRawHeader(b"Content-Type", b"application/json")
QgsNetworkAccessManager.instance().post(req, bytes(json.dumps(params), "utf-8"))
return True

View File

@ -28,7 +28,7 @@ from qgis.PyQt.QtCore import (pyqtSignal, QObject, QCoreApplication, QFile,
QLocale, QByteArray)
from qgis.PyQt.QtXml import QDomDocument
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
from qgis.core import Qgis, QgsSettings
from qgis.core import Qgis, QgsSettings, QgsNetworkRequestParameters
import sys
import os
import codecs
@ -322,6 +322,7 @@ class Repositories(QObject):
# url.addQueryItem('qgis', '.'.join([str(int(s)) for s in [v[0], v[1:3]]]) ) # don't include the bugfix version!
self.mRepositories[key]["QRequest"] = QNetworkRequest(url)
self.mRepositories[key]["QRequest"].setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "Relay")
authcfg = self.mRepositories[key]["authcfg"]
if authcfg and isinstance(authcfg, str):
if not QgsApplication.authManager().updateNetworkRequest(

View File

@ -30,7 +30,7 @@ from qgis.PyQt.QtWidgets import QDialog
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
import qgis
from qgis.core import QgsNetworkAccessManager, QgsApplication
from qgis.core import QgsNetworkAccessManager, QgsApplication, QgsNetworkRequestParameters
from .ui_qgsplugininstallerinstallingbase import Ui_QgsPluginInstallerInstallingDialogBase
from .installer_data import removeDir, repositories
@ -62,6 +62,7 @@ class QgsPluginInstallerInstallingDialog(QDialog, Ui_QgsPluginInstallerInstallin
def requestDownloading(self):
self.request = QNetworkRequest(self.url)
self.request.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "QgsPluginInstallerInstallingDialog")
authcfg = repositories.all()[self.plugin["zip_repository"]]["authcfg"]
if authcfg and isinstance(authcfg, str):
if not QgsApplication.authManager().updateNetworkRequest(

View File

@ -1119,6 +1119,7 @@ void QgsAuthOAuth2Edit::registerSoftStatement( const QString &registrationUrl )
bool res = false;
QByteArray json = QJsonWrapper::toJson( QVariant( mSoftwareStatement ), &res, &errStr );
QNetworkRequest registerRequest( regUrl );
QgsSetRequestInitiatorClass( registerRequest, QStringLiteral( "QgsAuthOAuth2Edit" ) );
registerRequest.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1Literal( "application/json" ) );
QNetworkReply *registerReply;
// For testability: use GET if protocol is file://
@ -1142,6 +1143,7 @@ void QgsAuthOAuth2Edit::getSoftwareStatementConfig()
QString config = leSoftwareStatementConfigUrl->text();
QUrl configUrl( config );
QNetworkRequest configRequest( configUrl );
QgsSetRequestInitiatorClass( configRequest, QStringLiteral( "QgsAuthOAuth2Edit" ) );
QNetworkReply *configReply = QgsNetworkAccessManager::instance()->get( configRequest );
mDownloading = true;
connect( configReply, &QNetworkReply::finished, this, &QgsAuthOAuth2Edit::configReplyFinished, Qt::QueuedConnection );

View File

@ -20,6 +20,7 @@
#include "qgsapplication.h"
#include "qgsauthoauth2config.h"
#include "qgslogger.h"
#include "qgsnetworkaccessmanager.h"
#include <QDir>
#include <QSettings>
@ -230,6 +231,7 @@ void QgsO2::link()
QUrl url( tokenUrl_ );
QNetworkRequest tokenRequest( url );
QgsSetRequestInitiatorClass( tokenRequest, QStringLiteral( "QgsO2" ) );
tokenRequest.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1Literal( "application/x-www-form-urlencoded" ) );
QNetworkReply *tokenReply = manager_->post( tokenRequest, payload );
@ -291,6 +293,7 @@ void QgsO2::onVerificationReceived( QMap<QString, QString> response )
if ( !apiKey_.isEmpty() )
query = QStringLiteral( "?=%1" ).arg( QString( O2_OAUTH2_API_KEY ), apiKey_ );
QNetworkRequest tokenRequest( QUrl( tokenUrl_.toString() + query ) );
QgsSetRequestInitiatorClass( tokenRequest, QStringLiteral( "QgsO2" ) );
tokenRequest.setHeader( QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM );
QMap<QString, QString> parameters;
parameters.insert( O2_OAUTH2_GRANT_TYPE_CODE, code() );

View File

@ -185,7 +185,7 @@ void QgsGeoNodeRequest::replyFinished()
else
{
QNetworkRequest request( toUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGeoNodeRequest" ) );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
@ -519,6 +519,7 @@ bool QgsGeoNodeRequest::requestBlocking( const QString &endPoint )
QNetworkReply *QgsGeoNodeRequest::requestUrl( const QString &url )
{
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGeoNodeRequest" ) );
// Add authentication check here
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );

View File

@ -23,6 +23,7 @@
#include "qgslogger.h"
#include "qgsmessagelog.h"
#include "qgsapplication.h"
#include "qgsnetworkaccessmanager.h"
#include <QObject>
#include <QMutex>
@ -322,6 +323,7 @@ class CORE_EXPORT QgsAbstractContentCache : public QgsAbstractContentCacheBase
mPendingRemoteUrls.insert( path );
//fire up task to fetch content in background
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsAbstractContentCache<%1>" ).arg( mTypeString ) );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

View File

@ -51,6 +51,7 @@ void QgsFileDownloader::startDownload()
QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance();
QNetworkRequest request( mUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsFileDownloader" ) );
if ( !mAuthCfg.isEmpty() )
{
QgsApplication::authManager()->updateNetworkRequest( request, mAuthCfg );

View File

@ -61,6 +61,8 @@ int QgsGml::getFeatures( const QString &uri, QgsWkbTypes::Type *wkbType, QgsRect
mExtent.setMinimal();
QNetworkRequest request( uri );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGml" ) );
if ( !authcfg.isEmpty() )
{
if ( !QgsApplication::authManager()->updateNetworkRequest( request, authcfg ) )

View File

@ -450,5 +450,7 @@ QgsNetworkRequestParameters::QgsNetworkRequestParameters( QNetworkAccessManager:
, mOriginatingThreadId( QStringLiteral( "0x%2" ).arg( reinterpret_cast<quintptr>( QThread::currentThread() ), 2 * QT_POINTER_SIZE, 16, QLatin1Char( '0' ) ) )
, mRequestId( requestId )
, mContent( content )
, mInitiatorClass( request.attribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorClass ) ).toString() )
, mInitiatorRequestId( request.attribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ) ) )
{
}

View File

@ -29,6 +29,14 @@
#include "qgis_core.h"
#include "qgis_sip.h"
#ifndef SIP_RUN
#include "qgsconfig.h"
constexpr int sFilePrefixLength = CMAKE_SOURCE_DIR[sizeof( CMAKE_SOURCE_DIR ) - 1] == '/' ? sizeof( CMAKE_SOURCE_DIR ) + 1 : sizeof( CMAKE_SOURCE_DIR );
#define QgsSetRequestInitiatorClass(request, _class) request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorClass ), _class ); request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), QString( __FILE__ ).mid( sFilePrefixLength ) + ':' + QString::number( __LINE__ ) + " (" + __FUNCTION__ + ")" );
#define QgsSetRequestInitiatorId(request, str) request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), QString( __FILE__ ).mid( sFilePrefixLength ) + ':' + QString::number( __LINE__ ) + " (" + __FUNCTION__ + "): " + str );
#endif
/**
* \class QgsNetworkRequestParameters
* \ingroup core
@ -39,6 +47,13 @@ class CORE_EXPORT QgsNetworkRequestParameters
{
public:
//! Custom request attributes
enum RequestAttributes
{
AttributeInitiatorClass = QNetworkRequest::User + 3000, //!< Class name of original object which created the request
AttributeInitiatorRequestId, //!< Internal ID used by originator object to identify requests
};
/**
* Default constructor.
*/
@ -82,6 +97,27 @@ class CORE_EXPORT QgsNetworkRequestParameters
*/
QByteArray content() const { return mContent; }
/**
* Returns the class name of the object which initiated this request.
*
* This is only available for QNetworkRequests which have had the
* QgsNetworkRequestParameters::AttributeInitiatorClass attribute set.
*
* \see initiatorRequestId()
*/
QString initiatorClassName() const { return mInitiatorClass; }
/**
* Returns the internal ID used by the object which initiated this request to identify
* individual requests.
*
* This is only available for QNetworkRequests which have had the
* QgsNetworkRequestParameters::AttributeInitiatorRequestId attribute set.
*
* \see initiatorClassName()
*/
QVariant initiatorRequestId() const { return mInitiatorRequestId; }
private:
QNetworkAccessManager::Operation mOperation;
@ -89,6 +125,8 @@ class CORE_EXPORT QgsNetworkRequestParameters
QString mOriginatingThreadId;
int mRequestId = 0;
QByteArray mContent;
QString mInitiatorClass;
QVariant mInitiatorRequestId;
};
/**

View File

@ -476,6 +476,7 @@ QByteArray QgsArcGisRestUtils::queryService( const QUrl &u, const QString &authc
QUrl url = parseUrl( u );
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisRestUtils" ) );
for ( auto it = requestHeaders.constBegin(); it != requestHeaders.constEnd(); ++it )
{
request.setRawHeader( it.key().toUtf8(), it.value().toUtf8() );
@ -1136,6 +1137,7 @@ void QgsArcGisAsyncQuery::start( const QUrl &url, QByteArray *result, bool allow
{
mResult = result;
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncQuery" ) );
if ( allowCache )
{
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
@ -1161,6 +1163,7 @@ void QgsArcGisAsyncQuery::handleReply()
if ( !redirect.isNull() )
{
QNetworkRequest request = mReply->request();
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncQuery" ) );
QgsDebugMsg( "redirecting to " + redirect.toUrl().toString() );
request.setUrl( redirect.toUrl() );
mReply = QgsNetworkAccessManager::instance()->get( request );
@ -1188,6 +1191,8 @@ void QgsArcGisAsyncParallelQuery::start( const QVector<QUrl> &urls, QVector<QByt
for ( int i = 0, n = urls.size(); i < n; ++i )
{
QNetworkRequest request( urls[i] );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncParallelQuery" ) );
QgsSetRequestInitiatorId( request, QString::number( i ) );
request.setAttribute( QNetworkRequest::HttpPipeliningAllowedAttribute, true );
if ( allowCache )
{
@ -1217,6 +1222,7 @@ void QgsArcGisAsyncParallelQuery::handleReply()
{
// Handle HTTP redirects
QNetworkRequest request = reply->request();
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsArcGisAsyncParallelQuery" ) );
QgsDebugMsg( "redirecting to " + redirect.toUrl().toString() );
request.setUrl( redirect.toUrl() );
reply = QgsNetworkAccessManager::instance()->get( request );

View File

@ -130,6 +130,7 @@ bool QgsWcsCapabilities::sendRequest( QString const &url )
QgsDebugMsg( "url = " + url );
mError.clear();
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsCapabilities" ) );
if ( !setAuthorization( request ) )
{
mError = tr( "Download of capabilities failed: network request update failed for authentication config" );
@ -347,6 +348,7 @@ void QgsWcsCapabilities::capabilitiesReplyFinished()
emit statusChanged( tr( "Capabilities request redirected." ) );
QNetworkRequest request( redirect.toUrl() );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsCapabilities" ) );
if ( !setAuthorization( request ) )
{
mCapabilitiesResponse.clear();
@ -387,6 +389,7 @@ void QgsWcsCapabilities::capabilitiesReplyFinished()
{
// Resend request if AlwaysCache
QNetworkRequest request = mCapabilitiesReply->request();
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsCapabilities" ) );
if ( request.attribute( QNetworkRequest::CacheLoadControlAttribute ).toInt() == QNetworkRequest::AlwaysCache )
{
QgsDebugMsg( QStringLiteral( "Resend request with PreferCache" ) );

View File

@ -1626,6 +1626,7 @@ QgsWcsDownloadHandler::QgsWcsDownloadHandler( const QUrl &url, QgsWcsAuthorizati
}
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsDownloadHandler" ) );
if ( !mAuth.setAuthorization( request ) )
{
QgsMessageLog::logMessage( tr( "Network request update failed for authentication config" ),
@ -1676,6 +1677,7 @@ void QgsWcsDownloadHandler::cacheReplyFinished()
QgsDebugMsg( QStringLiteral( "redirected getmap: %1" ).arg( redirect.toString() ) );
QNetworkRequest request( redirect.toUrl() );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsDownloadHandler" ) );
if ( !mAuth.setAuthorization( request ) )
{
QgsMessageLog::logMessage( tr( "Network request update failed for authentication config" ),
@ -1851,6 +1853,7 @@ void QgsWcsDownloadHandler::cacheReplyFinished()
{
// Resend request if AlwaysCache
QNetworkRequest request = mCacheReply->request();
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWcsDownloadHandler" ) );
if ( request.attribute( QNetworkRequest::CacheLoadControlAttribute ).toInt() == QNetworkRequest::AlwaysCache )
{
QgsDebugMsg( QStringLiteral( "Resend request with PreferCache" ) );

View File

@ -114,6 +114,7 @@ bool QgsWfsRequest::sendGET( const QUrl &url, bool synchronous, bool forceRefres
QgsDebugMsgLevel( QStringLiteral( "Calling: %1" ).arg( modifiedUrl.toDisplayString( ) ), 4 );
QNetworkRequest request( modifiedUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWfsRequest" ) );
if ( !mUri.auth().setAuthorization( request ) )
{
mErrorCode = QgsWfsRequest::NetworkError;
@ -252,6 +253,7 @@ bool QgsWfsRequest::sendPOST( const QUrl &url, const QString &contentTypeHeader,
}
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWfsRequest" ) );
if ( !mUri.auth().setAuthorization( request ) )
{
mErrorCode = QgsWfsRequest::NetworkError;
@ -336,6 +338,7 @@ void QgsWfsRequest::replyFinished()
else
{
QNetworkRequest request( toUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWfsRequest" ) );
if ( !mUri.auth().setAuthorization( request ) )
{
mResponse.clear();

View File

@ -1948,6 +1948,7 @@ bool QgsWmsCapabilitiesDownload::downloadCapabilities()
mError.clear();
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsCapabilitiesDownload" ) );
if ( !mAuth.setAuthorization( request ) )
{
mError = tr( "Download of capabilities failed: network request update failed for authentication config" );
@ -2016,6 +2017,7 @@ void QgsWmsCapabilitiesDownload::capabilitiesReplyFinished()
else
{
QNetworkRequest request( toUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsCapabilitiesDownload" ) );
if ( !mAuth.setAuthorization( request ) )
{
mHttpCapabilitiesResponse.clear();

View File

@ -2714,6 +2714,8 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPointXY &point, QgsRa
QgsDebugMsg( QStringLiteral( "getfeatureinfo: %1" ).arg( requestUrl.toString() ) );
QNetworkRequest request( requestUrl );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsProvider" ) );
QgsSetRequestInitiatorId( request, QStringLiteral( "identify %1,%2" ).arg( point.x() ).arg( point.y() ) );
mSettings.authorization().setAuthorization( request );
mIdentifyReply = QgsNetworkAccessManager::instance()->get( request );
connect( mIdentifyReply, &QNetworkReply::finished, this, &QgsWmsProvider::identifyReplyFinished );
@ -3582,6 +3584,7 @@ QgsWmsImageDownloadHandler::QgsWmsImageDownloadHandler( const QString &providerU
}
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsImageDownloadHandler" ) );
auth.setAuthorization( request );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
mCacheReply = QgsNetworkAccessManager::instance()->get( request );
@ -3753,6 +3756,7 @@ QgsWmsTiledImageDownloadHandler::QgsWmsTiledImageDownloadHandler( const QString
Q_FOREACH ( const QgsWmsProvider::TileRequest &r, requests )
{
QNetworkRequest request( r.url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsTiledImageDownloadHandler" ) );
auth.setAuthorization( request );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
@ -3849,6 +3853,7 @@ void QgsWmsTiledImageDownloadHandler::tileReplyFinished()
if ( !redirect.isNull() )
{
QNetworkRequest request( redirect.toUrl() );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsTiledImageDownloadHandler" ) );
mAuth.setAuthorization( request );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
@ -4031,6 +4036,7 @@ void QgsWmsTiledImageDownloadHandler::repeatTileRequest( QNetworkRequest const &
}
QNetworkRequest request( oldRequest );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsTiledImageDownloadHandler" ) );
QString url = request.url().toString();
int tileReqNo = request.attribute( static_cast<QNetworkRequest::Attribute>( TileReqNo ) ).toInt();
@ -4141,6 +4147,7 @@ QgsWmsLegendDownloadHandler::startUrl( const QUrl &url )
QgsDebugMsg( QStringLiteral( "legend url: %1" ).arg( url.toString() ) );
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWmsLegendDownloadHandler" ) );
mSettings.authorization().setAuthorization( request );
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );

View File

@ -1177,7 +1177,9 @@ void QgsWMSSourceSelect::btnSearch_clicked()
QUrl url( mySearchUrl.arg( leSearchTerm->text() ) );
QgsDebugMsg( url.toString() );
QNetworkReply *r = QgsNetworkAccessManager::instance()->get( QNetworkRequest( url ) );
QNetworkRequest request( url );
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWMSSourceSelect" ) );
QNetworkReply *r = QgsNetworkAccessManager::instance()->get( request );
connect( r, &QNetworkReply::finished, this, &QgsWMSSourceSelect::searchFinished );
}

View File

@ -201,6 +201,8 @@ void TestQgsNetworkAccessManager::fetchEncodedContent()
QVERIFY( requestId > 0 );
QCOMPARE( params.operation(), QNetworkAccessManager::GetOperation );
QCOMPARE( params.request().url(), u );
QCOMPARE( params.initiatorClassName(), QStringLiteral( "myTestClass" ) );
QCOMPARE( params.initiatorRequestId().toInt(), 55 );
} );
connect( QgsNetworkAccessManager::instance(), qgis::overload< QgsNetworkReplyContent >::of( &QgsNetworkAccessManager::finished ), &context, [&]( const QgsNetworkReplyContent & reply )
{
@ -210,7 +212,10 @@ void TestQgsNetworkAccessManager::fetchEncodedContent()
QCOMPARE( reply.request().url(), u );
loaded = true;
} );
QgsNetworkAccessManager::instance()->get( QNetworkRequest( u ) );
QNetworkRequest r( u );
r.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorClass ), QStringLiteral( "myTestClass" ) );
r.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), 55 );
QgsNetworkAccessManager::instance()->get( r );
while ( !loaded )
{
@ -222,7 +227,7 @@ void TestQgsNetworkAccessManager::fetchEncodedContent()
gotRequestAboutToBeCreatedSignal = false;
loaded = false;
BackgroundRequest *thread = new BackgroundRequest( QNetworkRequest( u ) );
BackgroundRequest *thread = new BackgroundRequest( r );
thread->start();