302 void setSslErrorHandler( std::unique_ptr< QgsSslErrorHandler > handler );
320 void setAuthHandler( std::unique_ptr< QgsNetworkAuthenticationHandler > handler );
331 void insertProxyFactory( QNetworkProxyFactory *factory
SIP_TRANSFER );
347 const QList<QNetworkProxyFactory *> proxyFactories()
const;
357 const QNetworkProxy &fallbackProxy()
const;
368 QStringList excludeList()
const;
379 QStringList noProxyList()
const;
392 void setFallbackProxyAndExcludes(
const QNetworkProxy &proxy,
const QStringList &excludes,
const QStringList &noProxyURLs );
399 static QString cacheLoadControlName( QNetworkRequest::CacheLoadControl control );
406 static QNetworkRequest::CacheLoadControl cacheLoadControlFromName(
const QString &name );
415 void setupDefaultProxyAndCache( Qt::ConnectionType connectionType = Qt::BlockingQueuedConnection );
452 static int timeout();
461 static void setTimeout(
int time );
483 static QgsNetworkReplyContent blockingGet( QNetworkRequest &request,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
505 static QgsNetworkReplyContent blockingPost( QNetworkRequest &request,
const QByteArray &data,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
519 static QString setRequestPreprocessor(
const std::function<
void( QNetworkRequest *request )> &processor );
521 static QString setRequestPreprocessor( SIP_PYCALLABLE / AllowNone / );
526 Py_BEGIN_ALLOW_THREADS
531 PyObject *s = sipCallMethod( NULL, a0,
"D", arg, sipType_QNetworkRequest, NULL );
534 QString *t1 =
reinterpret_cast<QString *
>( sipConvertToType( s, sipType_QString, 0, SIP_NOT_NONE, &state, &sipIsError ) );
535 if ( sipIsError == 0 )
537 res = QString( *t1 );
539 sipReleaseType( t1, sipType_QString, state );
545 s = sipConvertFromNewType(
new QString(
id ), sipType_QString, 0 );
561 static bool removeRequestPreprocessor(
const QString &
id );
563 static void removeRequestPreprocessor(
const QString &
id );
567 PyErr_SetString( PyExc_KeyError, QStringLiteral(
"No processor with id %1 exists." ).arg( *a0 ).toUtf8().constData() );
589 static QString setAdvancedRequestPreprocessor(
const std::function<
void( QNetworkRequest *,
int &op, QByteArray *data )> &processor );
591 static QString setAdvancedRequestPreprocessor( SIP_PYCALLABLE / AllowNone / );
596 Py_BEGIN_ALLOW_THREADS
601 PyObject *requestObj = sipConvertFromType( reqArg, sipType_QNetworkRequest, NULL );
602 PyObject *postDataObj = sipConvertFromType(
new QByteArray( *data ), sipType_QByteArray, Py_None );
604 PyObject *result = sipCallMethod( NULL, a0,
"RiR", requestObj, op, postDataObj );
606 Py_XDECREF( requestObj );
607 Py_XDECREF( postDataObj );
609 if ( result && PyTuple_Check( result ) && PyTuple_Size( result ) == 2 )
612 PyObject *opObj = PyTuple_GetItem( result, 0 );
613 if ( opObj && PyLong_Check( opObj ) )
615 op =
static_cast<int>( PyLong_AsLong( opObj ) );
617 PyObject *dataObj = PyTuple_GetItem( result, 1 );
618 if ( dataObj && dataObj != Py_None )
622 QByteArray *modifiedData =
reinterpret_cast<QByteArray *
>( sipConvertToType( dataObj, sipType_QByteArray, 0, SIP_NOT_NONE, &dataState, &sipIsErr ) );
626 data->append( *modifiedData );
627 sipReleaseType( modifiedData, sipType_QByteArray, dataState );
632 Py_XDECREF( result );
637 s = sipConvertFromNewType(
new QString(
id ), sipType_QString, 0 );
653 static bool removeAdvancedRequestPreprocessor(
const QString &
id );
655 static void removeAdvancedRequestPreprocessor(
const QString &
id );
659 PyErr_SetString( PyExc_KeyError, QStringLiteral(
"No processor with id %1 exists." ).arg( *a0 ).toUtf8().constData() );
678 static QString setReplyPreprocessor(
const std::function<
void (
const QNetworkRequest &, QNetworkReply * )> &processor );
680 static QString setReplyPreprocessor( SIP_PYCALLABLE / AllowNone / );
685 Py_BEGIN_ALLOW_THREADS
689 Py_XDECREF( sipCallMethod( NULL, a0,
"ND",
new QNetworkRequest( request ), sipType_QNetworkRequest, NULL, reply, sipType_QNetworkReply, NULL ) );
694 s = sipConvertFromNewType(
new QString(
id ), sipType_QString, 0 );
710 static bool removeReplyPreprocessor(
const QString &
id );
712 static void removeReplyPreprocessor(
const QString &
id );
716 PyErr_SetString( PyExc_KeyError, QStringLiteral(
"No processor with id %1 exists." ).arg( *a0 ).toUtf8().constData() );
728 void requestAuthOpenBrowser(
const QUrl &url )
const;
736 void requestAuthCloseBrowser()
const;
744 void abortAuthBrowser();
757 void preprocessRequest( QNetworkRequest *req )
const;
894 void sslErrorsOccurred( QNetworkReply *,
const QList<QSslError> &errors );
895 void sslErrorsHandled( QNetworkReply *reply );
914 void authRequestOccurred( QNetworkReply *, QAuthenticator *auth );
915 void authRequestHandled( QNetworkReply *reply );
936 void onReplyFinished( QNetworkReply *reply );
938 void onReplyDownloadProgress( qint64 bytesReceived, qint64 bytesTotal );
940 void onReplySslErrors(
const QList<QSslError> &errors );
942 void handleSslErrors( QNetworkReply *reply,
const QList<QSslError> &errors );
945 void onAuthRequired( QNetworkReply *reply, QAuthenticator *auth );
946 void handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth );
948 void syncCookies(
const QList<QNetworkCookie> &cookies );
951 QNetworkReply *createRequest( QNetworkAccessManager::Operation op,
const QNetworkRequest &req, QIODevice *outgoingData =
nullptr )
override;
955 void afterSslErrorHandled( QNetworkReply *reply );
958 void afterAuthRequestHandled( QNetworkReply *reply );
960 void pauseTimeout( QNetworkReply *reply );
961 void restartTimeout( QNetworkReply *reply );
962 static int getRequestId( QNetworkReply *reply );
964 QList<QNetworkProxyFactory *> mProxyFactories;
965 QNetworkProxy mFallbackProxy;
966 QStringList mExcludedURLs;
967 QStringList mNoProxyURLs;
968 bool mUseSystemProxy =
false;
969 bool mInitialized =
false;
970 bool mCacheDisabled =
false;
973 std::unique_ptr< QgsSslErrorHandler > mSslErrorHandler;
975 QSemaphore mSslErrorHandlerSemaphore;
978 std::unique_ptr< QgsNetworkAuthenticationHandler > mAuthHandler;
980 QSemaphore mAuthRequestHandlerSemaphore;
982 friend class TestQgsNetworkAccessManager;