Sur cette page

QNetworkAccessManager Class

La classe QNetworkAccessManager permet à l'application d'envoyer des requêtes réseau et de recevoir des réponses. En savoir plus...

En-tête : #include <QNetworkAccessManager>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Hérite de : QObject

Remarque : toutes les fonctions de cette classe sont réentrantes.

Types publics

enum Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation }

Fonctions publiques

QNetworkAccessManager(QObject *parent = nullptr)
virtual ~QNetworkAccessManager()
void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
bool autoDeleteReplies() const
QAbstractNetworkCache *cache() const
void clearAccessCache()
void clearConnectionCache()
void connectToHost(const QString &hostName, quint16 port = 80)
void connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
void connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
QNetworkCookieJar *cookieJar() const
QNetworkReply *deleteResource(const QNetworkRequest &request)
void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
QNetworkReply *get(const QNetworkRequest &request)
(since 6.7) QNetworkReply *get(const QNetworkRequest &request, QIODevice *data)
(since 6.7) QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data)
QNetworkReply *head(const QNetworkRequest &request)
bool isStrictTransportSecurityEnabled() const
bool isStrictTransportSecurityStoreEnabled() const
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data)
QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data)
(since 6.8) QNetworkReply *post(const QNetworkRequest &request, std::nullptr_t nptr)
QNetworkProxy proxy() const
QNetworkProxyFactory *proxyFactory() const
QNetworkReply *put(const QNetworkRequest &request, QIODevice *data)
QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data)
(since 6.8) QNetworkReply *put(const QNetworkRequest &request, std::nullptr_t nptr)
QNetworkRequest::RedirectPolicy redirectPolicy() const
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
void setAutoDeleteReplies(bool shouldAutoDelete)
void setCache(QAbstractNetworkCache *cache)
void setCookieJar(QNetworkCookieJar *cookieJar)
void setProxy(const QNetworkProxy &proxy)
void setProxyFactory(QNetworkProxyFactory *factory)
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
void setStrictTransportSecurityEnabled(bool enabled)
void setTransferTimeout(int timeout)
(since 6.7) void setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)
QList<QHstsPolicy> strictTransportSecurityHosts() const
virtual QStringList supportedSchemes() const
int transferTimeout() const
(since 6.7) std::chrono::milliseconds transferTimeoutAsDuration() const

Signaux

void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
void encrypted(QNetworkReply *reply)
void finished(QNetworkReply *reply)
void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)

Fonctions protégées

virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)

Description détaillée

L'API d'accès au réseau s'articule autour d'un objet QNetworkAccessManager, qui contient la configuration et les paramètres communs aux requêtes qu'il envoie. Il contient la configuration du proxy et du cache, ainsi que les signaux liés à ces aspects, et les signaux de réponse qui peuvent être utilisés pour surveiller la progression d'une opération réseau. Une seule instance de QNetworkAccessManager devrait suffire pour l'ensemble de l'application Qt. Comme QNetworkAccessManager repose sur la classe « QObject », il ne peut être utilisé qu'à partir du thread auquel il appartient.

Une fois qu’un objet `QNetworkAccessManager` a été créé, l’application peut l’utiliser pour envoyer des requêtes sur le réseau. Un ensemble de fonctions standard est fourni : celles-ci prennent en paramètre une requête et des données facultatives, et renvoient chacune un objet ` QNetworkReply `. L’objet renvoyé sert à récupérer les données fournies en réponse à la requête correspondante.

Un simple téléchargement depuis le réseau pourrait s’effectuer ainsi :

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
        this, &MyClass::replyFinished);

manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

QNetworkAccessManager dispose d’une API asynchrone. Lorsque le slot replyFinished ci-dessus est appelé, le paramètre qu’il prend en charge est l’objet QNetworkReply contenant les données téléchargées ainsi que les métadonnées (en-têtes, etc.).

Remarque : une fois la requête terminée, il incombe à l’utilisateur de supprimer l’objet ` QNetworkReply ` au moment opportun. Ne le supprimez pas directement dans le slot associé à ` finished()`. Vous pouvez utiliser la fonction ` deleteLater()`.

Remarque : QNetworkAccessManager met en file d’attente les requêtes qu’il reçoit. Le nombre de requêtes exécutées en parallèle dépend du protocole. Actuellement, pour le protocole HTTP sur les plateformes de bureau, 6 requêtes sont exécutées en parallèle pour une combinaison hôte/port.

Remarque : QNetworkAccessManager ne gère pas correctement la section 8.2.2 de la RFC 2616, dans la mesure où il ne réagit pas aux données entrantes tant qu’il n’a pas terminé l’écriture. Par exemple, le téléchargement d’un fichier volumineux ne s’arrêtera pas même si le serveur renvoie un code d’état indiquant au client de ne pas continuer.

Un exemple plus complexe, en supposant que le gestionnaire existe déjà, pourrait être :

QNetworkRequest request;
request.setUrl(QUrl("http://qt-project.org"));
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

QNetworkReply *reply = manager->get(request);
connect(reply, &QIODevice::readyRead, this, &MyClass::slotReadyRead);
connect(reply, &QNetworkReply::errorOccurred,
        this, &MyClass::slotError);
connect(reply, &QNetworkReply::sslErrors,
        this, &MyClass::slotSslErrors);

Depuis Qt 6.11, les valeurs par défaut des paramètres TCP Keepalive utilisés par QNetworkAccessManager ont été modifiées. Avec les paramètres actuels, la connexion sera interrompue après 2 minutes d'inactivité.

Ces paramètres peuvent être modifiés au cas par cas, pour les rendre plus souples ou au contraire plus stricts, via l’API QNetworkRequest.

QNetworkRequest networkRequest(url);
networkRequest.setTcpKeepAliveIdleTimeBeforeProbes(20s);
networkRequest.setTcpKeepAliveIntervalBetweenProbes(2s);
networkRequest.setTcpKeepAliveProbeCount(5);

Dans l'extrait de code ci-dessus, nous optons pour une stratégie plus stricte, consistant à interrompre la connexion après trente secondes d'inactivité. Cela peut s'avérer utile, par exemple, pour détecter rapidement les blocages réseau causés par des changements de configuration réseau sous Linux.

Voir également QNetworkRequest, QNetworkReply et QNetworkProxy.

Documentation sur les types de membres

enum QNetworkAccessManager::Operation

Indique l'opération en cours de traitement dans cette réponse.

ConstanteValeurDescription
QNetworkAccessManager::HeadOperation1opération de récupération des en-têtes (créée avec head())
QNetworkAccessManager::GetOperation2opération de récupération des en-têtes et de téléchargement du contenu (créée avec get())
QNetworkAccessManager::PutOperation3Opération de téléchargement de contenu (créée avec put())
QNetworkAccessManager::PostOperation4Envoyer le contenu d’un formulaire HTML pour traitement via HTTP POST (créé avec post())
QNetworkAccessManager::DeleteOperation5opération de suppression du contenu (créée avec deleteResource())
QNetworkAccessManager::CustomOperation6opération personnalisée (créée avec sendCustomRequest())

Voir également QNetworkReply::operation().

Documentation des fonctions membres

[explicit] QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)

Crée un objet `QNetworkAccessManager`, qui constitue le cœur de l'API d'accès au réseau, et définit ` parent ` comme objet parent.

[virtual noexcept] QNetworkAccessManager::~QNetworkAccessManager()

Détruit l'objet ` QNetworkAccessManager ` et libère toutes les ressources associées. Notez que les objets ` QNetworkReply ` renvoyés par cette classe ont cet objet comme parent ; cela signifie qu'ils seront supprimés en même temps que lui si vous n'appelez pas la méthode ` QObject::setParent()` sur chacun d'entre eux.

void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)

Ajoute les politiques HTTP Strict Transport Security au cache HSTS. Le fichier knownHosts contient la liste des hôtes connus disposant d'informations QHstsPolicy.

Remarque : une politique expirée entraînera la suppression d’un hôte connu du cache, s’il y figurait auparavant.

Remarque : lors du traitement des réponses HTTP, la fonction QNetworkAccessManager peut également mettre à jour le cache HSTS, en supprimant ou en mettant à jour des politiques existantes, ou en introduisant de nouvelles knownHosts. L'implémentation actuelle est donc pilotée par le serveur ; le code client peut fournir à QNetworkAccessManager des politiques déjà connues ou découvertes, mais ces informations peuvent être remplacées par les en-têtes de réponse « Strict-Transport-Security ».

Voir également strictTransportSecurityHosts(), enableStrictTransportSecurityStore() et QHstsPolicy.

[signal] void QNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)

Ce signal est émis chaque fois qu’un serveur final demande une authentification avant de fournir le contenu demandé. Le slot connecté à ce signal doit renseigner les informations d’identification pour le contenu (qui peuvent être déterminées en inspectant l’objet ` reply `) dans l’objet ` authenticator `.

QNetworkAccessManager mettra les informations d’authentification en cache en interne et enverra les mêmes valeurs si le serveur exige à nouveau une authentification, sans émettre le signal authenticationRequired(). S’il rejette les informations d’authentification, ce signal sera à nouveau émis.

Remarque : pour que la requête n’envoie pas d’identifiants, vous ne devez pas appeler setUser() ou setPassword() sur l’objet authenticator. Cela entraînera l’émission du signal finished() avec un QNetworkReply contenant l’erreur « AuthenticationRequiredError ».

Remarque : il n’est pas possible d’utiliser une `QueuedConnection` pour se connecter à ce signal, car la connexion échouera si l’authentificateur n’a pas été renseigné avec de nouvelles informations lorsque le signal revient.

Voir également proxyAuthenticationRequired(), QAuthenticator::setUser() et QAuthenticator::setPassword().

bool QNetworkAccessManager::autoDeleteReplies() const

Renvoie « true » si QNetworkAccessManager est actuellement configuré pour supprimer automatiquement les QNetworkReplies, « false » dans le cas contraire.

Voir également setAutoDeleteReplies et QNetworkRequest::AutoDeleteReplyOnFinishAttribute.

QAbstractNetworkCache *QNetworkAccessManager::cache() const

Renvoie le cache utilisé pour stocker les données obtenues via le réseau.

Voir aussi setCache().

void QNetworkAccessManager::clearAccessCache()

Vide le cache interne contenant les données d'authentification et les connexions réseau.

Cette fonction est utile pour effectuer des tests automatiques.

Voir également clearConnectionCache().

void QNetworkAccessManager::clearConnectionCache()

Vide le cache interne des connexions réseau. Contrairement à la fonction ` clearAccessCache()` (), les données d'authentification sont conservées.

Voir également clearAccessCache().

void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)

Établit une connexion vers l'hôte indiqué par hostName sur le port port. Cette fonction permet d'effectuer la négociation TCP avec un hôte avant l'envoi de la requête HTTP, ce qui réduit la latence réseau.

Remarque : cette fonction ne permet pas de signaler des erreurs.

Voir également connectToHostEncrypted(), get(), post(), put() et deleteResource().

void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())

Lance une connexion vers l'hôte spécifié par hostName sur le port port, en utilisant sslConfiguration. Cette fonction est utile pour établir la négociation TCP et SSL avec un hôte avant que la requête HTTPS ne soit effectuée, ce qui permet de réduire la latence réseau.

Remarque : il est possibled’établir au préalable une connexion HTTP/2 en appelant la méthode setAllowedNextProtocols() sur sslConfiguration, en incluant QSslConfiguration::ALPNProtocolHTTP2 dans la liste des protocoles autorisés. Lors de l’utilisation de HTTP/2, une seule connexion par hôte suffit ; ainsi, appeler cette méthode plusieurs fois pour un même hôte n’accélérera pas les transactions réseau.

Remarque : cette fonction ne permet pas de signaler des erreurs.

Voir également connectToHost(), get(), post(), put() et deleteResource().

void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)

Lance une connexion vers l'hôte indiqué par ` hostName ` sur le port ` port`, en utilisant ` sslConfiguration ` avec ` peerName ` défini comme nom d'hôte utilisé pour la validation du certificat. Cette fonction est utile pour établir la négociation TCP et SSL avec un hôte avant que la requête HTTPS ne soit effectuée, ce qui permet de réduire la latence réseau.

Remarque : il est possibled’établir au préalable une connexion HTTP/2 en appelant la méthode `setAllowedNextProtocols()` sur ` sslConfiguration `, en incluant ` QSslConfiguration::ALPNProtocolHTTP2 ` dans la liste des protocoles autorisés. Lors de l’utilisation de HTTP/2, une seule connexion par hôte suffit ; ainsi, appeler cette méthode plusieurs fois par hôte n’accélérera pas les transactions réseau.

Remarque : cette fonction ne permet pas de signaler des erreurs.

Il s’agit d’une fonction surchargée.

Voir également connectToHost(), get(), post(), put() et deleteResource().

QNetworkCookieJar *QNetworkAccessManager::cookieJar() const

Renvoie l'QNetworkCookieJar utilisé pour stocker les cookies reçus du réseau ainsi que ceux sur le point d'être envoyés.

Voir aussi setCookieJar().

[virtual protected] QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)

Renvoie un nouvel objet ` QNetworkReply ` destiné à gérer l’opération ` op ` et la requête ` originalReq`. Le paramètre ` outgoingData ` est toujours égal à 0 pour les requêtes `Get` et `Head`, mais correspond à la valeur transmise aux méthodes ` post()` et ` put()` dans le cadre de ces opérations (les variantes ` QByteArray ` transmettront un objet ` QBuffer `).

L'implémentation par défaut appelle la méthode QNetworkCookieJar::cookiesForUrl() sur le « cookie jar » configuré avec setCookieJar() afin d'obtenir les cookies à envoyer au serveur distant.

L’objet renvoyé doit être dans un état ouvert.

QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)

Envoie une requête visant à supprimer la ressource identifiée par l'URL request.

Remarque : cette fonctionnalité n'est actuellement disponible que pour HTTP et effectue une requête HTTP DELETE.

Voir également get(), post(), put() et sendCustomRequest().

void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())

Si la valeur de « enabled » est « true », le cache HSTS interne utilisera un magasin persistant pour lire et écrire les politiques HSTS. La propriété « storeDir » définit l'emplacement de ce magasin. L'emplacement par défaut est défini par « QStandardPaths::CacheLocation ». S'il n'existe aucun emplacement « QStandartPaths::CacheLocation » accessible en écriture et que la propriété « storeDir » est une chaîne vide, le magasin sera situé dans le répertoire de travail du programme.

Remarque : si le cache HSTS contient déjà des politiques HSTS au moment où le magasin persistant est activé, ces politiques seront conservées dans le magasin. Si le cache et le magasin contiennent tous deux les mêmes hôtes connus, les politiques du cache sont considérées comme plus récentes (et remplaceront donc les valeurs précédentes du magasin). Si ce comportement n’est pas souhaité, activez le magasin HSTS avant d’activer la sécurité de transport stricte. Par défaut, le magasin persistant des politiques HSTS est désactivé.

Remarque : le magasin HSTS conserve les politiques sur le disque à l’aide d’un fichier « QSettings » au format INI, sans chiffrement ni protection de l’intégrité. Le magasin révèle les hôtes avec lesquels l’application a communiqué via HTTPS, puisqu’une entrée HSTS est enregistrée pour chaque hôte envoyant un en-tête « Strict-Transport-Security ». Dans les applications sensibles en matière de confidentialité, cet historique de connexion doit être traité comme des données confidentielles.

Un attaquant disposant d’un accès en écriture au fichier de stockage pourrait supprimer les entrées HSTS correspondant à des domaines spécifiques, ce qui amènerait l’application à autoriser des connexions HTTP en clair vers ces domaines lors des requêtes suivantes et pourrait faciliter des attaques de « SSL stripping ». Les applications qui s’appuient sur HSTS doivent s’assurer que le répertoire de stockage est protégé par des droits d’accès appropriés au système de fichiers.

Voir également isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled() et QStandardPaths::standardLocations().

[signal] void QNetworkAccessManager::encrypted(QNetworkReply *reply)

Ce signal est émis lorsqu'une session SSL/TLS a mené à bien la phase initiale d'établissement de la connexion. À ce stade, aucune donnée utilisateur n'a encore été transmise. Ce signal peut être utilisé pour effectuer des vérifications supplémentaires sur la chaîne de certificats, par exemple pour avertir les utilisateurs lorsque le certificat d'un site web a changé. Le paramètre ` reply ` spécifie quelle réponse réseau est concernée. Si la réponse ne correspond pas aux critères attendus, elle doit être interrompue en appelant la méthode ` QNetworkReply::abort()` depuis un slot connecté à ce signal. La configuration SSL en cours d’utilisation peut être consultée à l’aide de la méthode ` QNetworkReply::sslConfiguration()`.

En interne, la fonction ` QNetworkAccessManager ` peut ouvrir plusieurs connexions vers un serveur afin de lui permettre de traiter les requêtes en parallèle. Ces connexions peuvent être réutilisées, ce qui signifie que le signal `encrypted()` ne sera pas émis. Cela signifie que vous n’êtes assuré de recevoir ce signal que pour la première connexion à un site au cours de la durée de vie de la connexion ` QNetworkAccessManager`.

Voir également QSslSocket::encrypted() et QNetworkReply::encrypted().

[signal] void QNetworkAccessManager::finished(QNetworkReply *reply)

Ce signal est émis dès qu’une réponse réseau en attente est terminée. Le paramètre ` reply ` contiendra un pointeur vers la réponse qui vient de s’achever. Ce signal est émis en même temps que le signal ` QNetworkReply::finished()`.

Voir QNetworkReply::finished() pour plus d’informations sur l’état dans lequel se trouvera l’objet.

Remarque : ne supprimez pas l'objet reply dans le slot connecté à ce signal. Utilisezplutôt deleteLater().

Voir également QNetworkReply::finished() et QNetworkReply::error().

QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)

Envoie une requête pour récupérer le contenu de l'request cible et renvoie un nouvel objet QNetworkReply ouvert en lecture, qui émet le signal readyRead() dès que de nouvelles données arrivent.

Le contenu ainsi que les en-têtes associés seront téléchargés.

Voir également post(), put(), deleteResource() et sendCustomRequest().

[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, QIODevice *data)

Remarque : une requête GET comportant un corps de message n'est pas mise en cache.

Remarque : si la requête est redirigée, le corps du message n'est conservé que si le code d'état est 308.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.7.

[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, const QByteArray &data)

Remarque : une requête GET comportant un corps de message n'est pas mise en cache.

Remarque : si la requête est redirigée, le corps du message n'est conservé que si le code d'état est 308.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.7.

Envoie une requête pour obtenir les en-têtes réseau de request et renvoie un nouvel objet QNetworkReply qui contiendra ces en-têtes.

La fonction tire son nom de la requête HTTP associée (HEAD).

bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const

Renvoie « true » si le protocole HTTP Strict Transport Security (HSTS) a été activé. Par défaut, HSTS est désactivé.

Voir également setStrictTransportSecurityEnabled().

bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const

Renvoie « true » si le cache HSTS utilise un espace de stockage permanent pour charger et stocker les politiques HSTS.

Voir également ` enableStrictTransportSecurityStore()`.

QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODevice *data)

Envoie une requête HTTP POST à la destination spécifiée par request et renvoie un nouvel objet QNetworkReply ouvert en lecture qui contiendra la réponse envoyée par le serveur. Le contenu du périphérique data sera transféré vers le serveur.

data doit être ouvert en lecture et doit rester valide jusqu'à ce que le signal finished() soit émis pour cette réponse.

Remarque : l’envoi d’une requête POST sur des protocoles autres que HTTP et HTTPS n’est pas défini et échouera probablement.

Voir également get(), put(), deleteResource() et sendCustomRequest().

QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)

Envoie le contenu du message multiPart à la destination indiquée par request.

Cette fonction peut être utilisée pour envoyer des messages MIME multipart via HTTP.

Il s'agit d'une fonction surchargée.

Voir également QHttpMultiPart, QHttpPart et put().

QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data)

Envoie le contenu du tableau d'octets ` data ` vers la destination spécifiée par ` request`.

Il s'agit d'une fonction surchargée.

[since 6.8] QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, std::nullptr_t nptr)

Envoie la requête POST spécifiée par request sans corps et renvoie un nouvel objet QNetworkReply.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.8.

[signal] void QNetworkAccessManager::preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)

Ce signal est émis si la négociation SSL/TLS aboutit à un ensemble de chiffrement PSK, ce qui rend alors nécessaire une authentification PSK. L'objet ` reply ` correspond à l'QNetworkReply, qui négocie ces ensembles de chiffrement.

Lorsqu’il utilise le PSK, le client doit envoyer au serveur une identité valide et une clé pré-partagée valide pour que la négociation SSL puisse se poursuivre. Les applications peuvent fournir ces informations dans un slot connecté à ce signal, en renseignant l’objet ` authenticator ` transmis selon leurs besoins.

Remarque : ignorer ce signal ou ne pas fournir les informations d’authentification requises entraînera l’échec de la négociation et, par conséquent, l’interruption de la connexion.

Remarque : l’objet authenticator appartient à la réponse et ne doit pas être supprimé par l’application.

Voir également QSslPreSharedKeyAuthenticator.

QNetworkProxy QNetworkAccessManager::proxy() const

Renvoie l'QNetworkProxy que les requêtes envoyées à l'aide de cet objet QNetworkAccessManager utiliseront. La valeur par défaut du proxy est QNetworkProxy::DefaultProxy.

Voir également setProxy(), setProxyFactory() et proxyAuthenticationRequired().

[signal] void QNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)

Ce signal est émis chaque fois qu’un proxy demande une authentification et que QNetworkAccessManager ne parvient pas à trouver d’identifiants valides en cache. Le slot connecté à ce signal doit renseigner les identifiants pour l’ proxy du proxy dans l’objet authenticator.

QNetworkAccessManager QNetworkAccessManager mettra ces identifiants en cache en interne. La prochaine fois que le proxy demandera une authentification, enverra automatiquement les mêmes identifiants sans émettre à nouveau le signal proxyAuthenticationRequired.

Si le proxy rejette les identifiants, QNetworkAccessManager émettra à nouveau le signal.

Voir également proxy(), setProxy() et authenticationRequired().

QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const

Renvoie l'instance de la fabrique de proxys que cet objet ` QNetworkAccessManager ` utilise pour déterminer les proxys à utiliser pour les requêtes.

Notez que le pointeur renvoyé par cette fonction est géré par QNetworkAccessManager et peut être supprimé à tout moment.

Voir également setProxyFactory() et proxy().

QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)

Envoie le contenu de ` data ` vers la destination ` request ` et renvoie un nouvel objet ` QNetworkReply ` qui sera ouvert pour la réponse.

data doit être ouvert en lecture lorsque cette fonction est appelée et doit rester valide jusqu’à ce que le signal finished() soit émis pour cette réponse.

La disponibilité ou non de données à lire dans l’objet renvoyé dépend du protocole. Pour HTTP, le serveur peut envoyer une petite page HTML indiquant que le téléchargement a réussi (ou échoué). D’autres protocoles auront probablement du contenu dans leurs réponses.

Remarque : pour HTTP, cette fonction enverra une requête PUT, ce que la plupart des serveurs n’autorisent pas. Les mécanismes de soumission de formulaires, y compris ceux permettant de télécharger des fichiers via des formulaires HTML, utilisent le mécanisme POST.

Voir également get(), post(), deleteResource() et sendCustomRequest().

QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)

Envoie le contenu du message multiPart à la destination spécifiée par request.

Cette fonction peut être utilisée pour envoyer des messages MIME multipart via HTTP.

Il s'agit d'une fonction surchargée.

Voir également QHttpMultiPart, QHttpPart et post().

QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data)

Envoie le contenu du tableau d'octets ` data ` vers la destination spécifiée par ` request`.

Il s'agit d'une fonction surchargée.

[since 6.8] QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, std::nullptr_t nptr)

Envoie la requête PUT spécifiée par request sans corps et renvoie un nouvel objet QNetworkReply.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.8.

QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const

Renvoie la politique de redirection utilisée lors de la création de nouvelles requêtes.

Voir également setRedirectPolicy() et QNetworkRequest::RedirectPolicy.

QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)

Envoie une requête personnalisée au serveur identifié par l'URL request.

Il incombe à l’utilisateur d’envoyer au serveur une requête verb valide selon la spécification HTTP.

Cette méthode permet d'envoyer des verbes autres que ceux couramment fournis via get() ou post() etc., par exemple pour envoyer une commande HTTP OPTIONS.

Si data n’est pas vide, le contenu du périphérique data sera envoyé au serveur ; dans ce cas, les données doivent être accessibles en lecture et doivent rester valides jusqu’à ce que le signal finished() soit émis pour cette réponse.

Remarque : cette fonctionnalité n’est actuellement disponible que pour HTTP(S).

Voir également get(), post(), put() et deleteResource().

QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)

Envoie une requête personnalisée au serveur identifié par l'URL request.

Envoie le contenu du message multiPart à la destination spécifiée par request.

Cette fonction peut être utilisée pour envoyer des messages MIME multipart pour des verbes personnalisés.

Il s'agit d'une fonction surchargée.

Voir également QHttpMultiPart, QHttpPart et put().

QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)

Envoie le contenu du tableau d'octets ` data ` vers la destination spécifiée par ` request`.

Il s'agit d'une fonction surchargée.

void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)

Active ou désactive la suppression automatique de QNetworkReplies.

Définir shouldAutoDelete sur « true » revient à définir l'attribut QNetworkRequest::AutoDeleteReplyOnFinishAttribute sur « true » pour toutes les futures requêtes QNetworkRequests transmises à cette instance de QNetworkAccessManager, sauf si cet attribut a déjà été explicitement défini sur la requête QNetworkRequest.

Voir également autoDeleteReplies et QNetworkRequest::AutoDeleteReplyOnFinishAttribute.

void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)

Définit le cache réseau du gestionnaire sur l’ cache e spécifiée. Le cache est utilisé pour toutes les requêtes transmises par le gestionnaire.

Utilisez cette fonction pour définir l’objet de cache réseau sur une classe qui implémente des fonctionnalités supplémentaires, telles que l’enregistrement des cookies dans un espace de stockage permanent.

Remarque : ` QNetworkAccessManager ` prend possession de l’objet ` cache `.

QNetworkAccessManager Par défaut, aucun cache n'est défini. Qt fournit un cache disque simple, QNetworkDiskCache, qui peut être utilisé.

Voir également cache() et QNetworkRequest::CacheLoadControl.

void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)

Définit le « cookie jar » du gestionnaire sur l'cookieJar e spécifiée. Le « cookie jar » est utilisé par toutes les requêtes transmises par le gestionnaire.

Utilisez cette fonction pour définir l’objet « cookie jar » sur une classe qui implémente des fonctionnalités supplémentaires, telles que l’enregistrement des cookies dans un espace de stockage permanent.

Remarque : ` QNetworkAccessManager ` prend possession de l’objet ` cookieJar `.

Si cookieJar se trouve dans le même thread que cet QNetworkAccessManager, il définira le parent de l’ cookieJar de sorte que le cookie jar soit supprimé lorsque cet objet sera lui aussi supprimé. Si vous souhaitez partager des cookie jars entre différents objets QNetworkAccessManager, vous pouvez définir le parent du cookie jar sur 0 après avoir appelé cette fonction.

QNetworkAccessManager Par défaut, `cookieJar` n’implémente aucune politique de cookies propre : il accepte tous les cookies envoyés par le serveur, à condition qu’ils soient correctement formés et qu’ils respectent les exigences minimales de sécurité (le domaine du cookie correspond à celui de la requête et le chemin du cookie correspond à celui de la requête). Pour implémenter votre propre politique de sécurité, redéfinissez les fonctions virtuelles ` QNetworkCookieJar::cookiesForUrl()` et ` QNetworkCookieJar::setCookiesFromUrl()`. Ces fonctions sont appelées par ` QNetworkAccessManager ` lorsqu’il détecte un nouveau cookie.

Voir également cookieJar(), QNetworkCookieJar::cookiesForUrl() et QNetworkCookieJar::setCookiesFromUrl().

void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)

Définit le proxy à utiliser pour les futures requêtes sur proxy. Cela n'affecte pas les requêtes déjà envoyées. Le signal proxyAuthenticationRequired() sera émis si le proxy exige une authentification.

Un proxy défini à l'aide de cette fonction sera utilisé pour toutes les requêtes émises par QNetworkAccessManager. Dans certains cas, il peut s'avérer nécessaire de sélectionner différents proxys en fonction du type de requête envoyée ou de l'hôte de destination. Si tel est le cas, vous devriez envisager d'utiliser setProxyFactory().

Voir également proxy() et proxyAuthenticationRequired().

void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)

Définit la fabrique de proxys de cette classe sur factory. Une fabrique de proxys sert à déterminer une liste plus précise de proxys à utiliser pour une requête donnée, plutôt que d’essayer d’utiliser la même valeur de proxy pour toutes les requêtes.

Toutes les requêtes envoyées par QNetworkAccessManager seront de type QNetworkProxyQuery::UrlRequest.

Par exemple, une fabrique de proxys pourrait appliquer les règles suivantes :

  • si l'adresse de destination se trouve sur le réseau local (par exemple, si le nom d'hôte ne contient pas de points ou s'il s'agit d'une adresse IP appartenant à la plage de l'organisation), renvoyer QNetworkProxy::NoProxy
  • si la requête est de type FTP, renvoyer un proxy FTP
  • si la requête est de type HTTP ou HTTPS, renvoyer un proxy HTTP
  • sinon, renvoie un serveur proxy SOCKSv5

La durée de vie de l’objet ` factory ` sera gérée par ` QNetworkAccessManager`. Ce dernier supprimera l’objet lorsque cela sera nécessaire.

Remarque : si un proxy spécifique est défini avec setProxy(), la fabrique ne sera pas utilisée.

Voir également proxyFactory(), setProxy() et QNetworkProxyQuery.

void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)

Définit la politique de redirection du gestionnaire sur l'policy spécifiée. Cette politique s'appliquera à toutes les requêtes ultérieures générées par le gestionnaire.

Utilisez cette fonction pour activer ou désactiver les redirections HTTP au niveau du gestionnaire.

Remarque : lors de la création d’une requête, QNetworkRequest::RedirectAttributePolicy a la priorité la plus élevée, suivie par la politique du gestionnaire.

La valeur par défaut est QNetworkRequest::NoLessSafeRedirectPolicy. Il est recommandé aux clients qui s'appuient sur une gestion manuelle des redirections de définir explicitement cette politique dans leur code.

Voir également ` redirectPolicy()` et ` QNetworkRequest::RedirectPolicy`.

void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)

Si enabled correspond à true, QNetworkAccessManager respecte la politique HTTP Strict Transport Security (HSTS, RFC 6797). Lors du traitement d’une requête, QNetworkAccessManager remplace automatiquement le schéma « http » par « https » et utilise un transport sécurisé pour les hôtes HSTS. S’il est défini explicitement, le port 80 est remplacé par le port 443.

Lorsque HSTS est activé, pour chaque réponse HTTP contenant un en-tête HSTS et reçue via un transport sécurisé, QNetworkAccessManager met à jour son cache HSTS, soit en enregistrant un hôte dont la politique est valide, soit en supprimant un hôte dont la politique HSTS a expiré ou a été désactivée.

Voir également isStrictTransportSecurityEnabled().

void QNetworkAccessManager::setTransferTimeout(int timeout)

Définit la valeur timeout comme délai d'expiration du transfert, en millisecondes.

Voir également setTransferTimeout(std::chrono::milliseconds), transferTimeout() et transferTimeoutAsDuration().

[since 6.7] void QNetworkAccessManager::setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)

Définit le délai d'duration, au-delà duquel le transfert est interrompu si aucune donnée n'est échangée.

Les transferts sont interrompus si aucun octet n’est transféré avant l’expiration du délai d’attente. La valeur zéro signifie qu’aucun délai d’attente n’est défini. Si aucun argument n’est fourni, le délai d’attente est de QNetworkRequest::DefaultTransferTimeout. Si cette fonction n’est pas appelée, le délai d’attente est désactivé et prend la valeur zéro. Les délais d’expiration non nuls spécifiques à la requête, définis pour les requêtes en cours d’exécution, prévalent sur cette valeur. Cela signifie que si QNetworkAccessManager dispose d’un délai d’expiration activé, celui-ci doit être désactivé pour exécuter une requête sans délai d’expiration.

Cette fonction a été introduite dans Qt 6.7.

Voir également transferTimeoutAsDuration().

[signal] void QNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)

Ce signal est émis si la session SSL/TLS a rencontré des erreurs lors de son établissement, notamment des erreurs de vérification de certificat. Le paramètre ` errors ` contient la liste des erreurs et ` reply ` correspond à l’ QNetworkReply e qui rencontre ces erreurs.

Pour indiquer que les erreurs ne sont pas fatales et que la connexion doit se poursuivre, la fonction QNetworkReply::ignoreSslErrors() doit être appelée depuis le slot connecté à ce signal. Si elle n’est pas appelée, la session SSL sera interrompue avant tout échange de données (y compris l’URL).

Ce signal peut être utilisé pour afficher un message d’erreur à l’utilisateur indiquant que la sécurité est potentiellement compromise et pour afficher les paramètres SSL (voir sslConfiguration() pour les obtenir). Si l’utilisateur décide de poursuivre après avoir analysé le certificat distant, le slot doit appeler ignoreSslErrors().

Voir également QSslSocket::sslErrors(), QNetworkReply::sslErrors(), QNetworkReply::sslConfiguration() et QNetworkReply::ignoreSslErrors().

QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const

Renvoie la liste des politiques HTTP Strict Transport Security. Cette liste peut différer de celle initialement définie via addStrictTransportSecurityHosts() si le cache HSTS a été mis à jour à partir d'un en-tête de réponse « Strict-Transport-Security ».

Voir également addStrictTransportSecurityHosts() et QHstsPolicy.

[virtual] QStringList QNetworkAccessManager::supportedSchemes() const

Répertorie tous les schémas d'URL pris en charge par le gestionnaire d'accès.

Réimplémentez cette méthode pour fournir vos propres schémas pris en charge dans une sous-classe de ` QNetworkAccessManager `. Cela est par exemple nécessaire lorsque votre sous-classe prend en charge de nouveaux protocoles.

int QNetworkAccessManager::transferTimeout() const

Renvoie le délai d'expiration utilisé pour les transferts, en millisecondes.

Voir aussi setTransferTimeout().

[since 6.7] std::chrono::milliseconds QNetworkAccessManager::transferTimeoutAsDuration() const

Renvoie la durée du délai d'expiration au-delà duquel le transfert est interrompu si aucune donnée n'est échangée.

La durée par défaut est zéro, ce qui signifie que le délai d'expiration n'est pas utilisé.

Cette fonction a été introduite dans Qt 6.7.

Voir également ` setTransferTimeout` (std::chrono::milliseconds).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.