En esta página

QNetworkAccessManager Class

La clase QNetworkAccessManager permite a la aplicación enviar peticiones de red y recibir respuestas. Más...

Cabecera: #include <QNetworkAccessManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Hereda: QObject

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

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

Funciones Públicas

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

Señales

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)

Funciones Protegidas

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

Descripción Detallada

La API de Acceso a Red se construye alrededor de un objeto QNetworkAccessManager, que mantiene la configuración y ajustes comunes para las peticiones que envía. Contiene la configuración del proxy y de la caché, así como las señales relacionadas con dichos temas, y señales de respuesta que pueden utilizarse para monitorizar el progreso de una operación de red. Una instancia de QNetworkAccessManager debería ser suficiente para toda la aplicación Qt. Dado que QNetworkAccessManager está basado en QObject, sólo puede ser utilizado desde el hilo al que pertenece.

Una vez creado un objeto QNetworkAccessManager, la aplicación puede utilizarlo para enviar peticiones a través de la red. Se suministra un grupo de funciones estándar que toman una petición y datos opcionales, y cada una devuelve un objeto QNetworkReply. El objeto devuelto se utiliza para obtener cualquier dato devuelto en respuesta a la solicitud correspondiente.

Una simple descarga de la red podría realizarse con:

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

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

QNetworkAccessManager tiene una API asíncrona. Cuando se llama a la ranura replyFinished de arriba, el parámetro que toma es el objeto QNetworkReply que contiene los datos descargados así como los metadatos (cabeceras, etc.).

Nota: Una vez finalizada la solicitud, es responsabilidad del usuario eliminar el objeto QNetworkReply en el momento oportuno. No lo borre directamente dentro de la ranura conectada a finished(). Puede utilizar la función deleteLater().

Nota: QNetworkAccessManager pone en cola las peticiones que recibe. El número de peticiones ejecutadas en paralelo depende del protocolo. Actualmente, para el protocolo HTTP en plataformas de escritorio, se ejecutan 6 peticiones en paralelo para una combinación host/puerto.

Nota: QNetworkAccessManager no maneja correctamente el RFC 2616 Sección 8.2.2, en el sentido de que no reacciona a los datos entrantes hasta que ha terminado de escribir. Por ejemplo, la subida de un fichero grande no se detendrá aunque el servidor devuelva un código de estado que indique al cliente que no continúe.

Un ejemplo más complicado, asumiendo que el gestor ya existe, puede ser:

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);

Desde Qt 6.11 se han cambiado los valores por defecto de los parámetros TCP Keepalive utilizados por QNetworkAccessManager. Con la configuración actual la conexión se terminará después de 2 minutos de inactividad.

Estos ajustes pueden ser cambiados en peticiones individuales, para hacerlos más indulgentes, o incluso más agresivos a través de la API QNetworkRequest.

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

En el fragmento anterior estamos eligiendo una estrategia más agresiva, para terminar la conexión después de treinta segundos de inactividad. Esto puede ser útil, por ejemplo, en la detección temprana de cuelgues de red causados por cambios en la red en Linux.

Véase también QNetworkRequest, QNetworkReply, y QNetworkProxy.

Documentación de tipos de miembros

enum QNetworkAccessManager::Operation

Indica la operación que está procesando esta respuesta.

ConstanteValorDescripción
QNetworkAccessManager::HeadOperation1operación de recuperación de cabeceras (creada con head())
QNetworkAccessManager::GetOperation2operación de recuperación de cabeceras y descarga de contenidos (creada con get())
QNetworkAccessManager::PutOperation3operación de carga de contenidos (creada con put())
QNetworkAccessManager::PostOperation4enviar el contenido de un formulario HTML para su procesamiento mediante HTTP POST (creado con post())
QNetworkAccessManager::DeleteOperation5operación de supresión de contenidos (creada con deleteResource())
QNetworkAccessManager::CustomOperation6operación personalizada (creada con sendCustomRequest())

Véase también QNetworkReply::operation().

Documentación de las funciones miembro

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

Construye un objeto QNetworkAccessManager que es el centro de la API de Acceso a Red y establece parent como el objeto padre.

[virtual noexcept] QNetworkAccessManager::~QNetworkAccessManager()

Destruye el objeto QNetworkAccessManager y libera cualquier recurso. Ten en cuenta que los objetos QNetworkReply que se devuelven desde esta clase tienen este objeto establecido como padre, lo que significa que se eliminarán junto con él si no llamas a QObject::setParent() sobre ellos.

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

Añade políticas HTTP Strict Transport Security a la caché HSTS. knownHosts contiene los hosts conocidos que tienen información de QHstsPolicy.

Nota: Una política expirada eliminará un host conocido de la caché, si previamente estaba presente.

Nota: Mientras procesa las respuestas HTTP, QNetworkAccessManager también puede actualizar la caché HSTS, eliminando o actualizando las políticas de salida o introduciendo nuevas knownHosts. Así pues, la implementación actual está dirigida por el servidor, el código cliente puede proporcionar a QNetworkAccessManager políticas previamente conocidas o descubiertas, pero esta información puede ser anulada por las cabeceras de respuesta "Strict-Transport-Security".

Véase también strictTransportSecurityHosts(), enableStrictTransportSecurityStore(), y QHstsPolicy.

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

Esta señal se emite siempre que un servidor final solicita autenticación antes de entregar los contenidos solicitados. La ranura conectada a esta señal debe rellenar las credenciales para los contenidos (que pueden determinarse inspeccionando el objeto reply ) en el objeto authenticator.

QNetworkAccessManager almacenará en caché las credenciales internamente y enviará los mismos valores si el servidor requiere autenticación de nuevo, sin emitir la señal authenticationRequired(). Si rechaza las credenciales, esta señal será emitida de nuevo.

Nota: Para que la petición no envíe credenciales no debes llamar a setUser() o setPassword() en el objeto authenticator. Esto hará que se emita la señal finished() con un QNetworkReply con error AuthenticationRequiredError.

Nota: No es posible utilizar una QueuedConnection para conectarse a esta señal, ya que la conexión fallará si el autenticador no ha sido rellenado con nueva información cuando la señal retorne.

Véase también proxyAuthenticationRequired(), QAuthenticator::setUser(), y QAuthenticator::setPassword().

bool QNetworkAccessManager::autoDeleteReplies() const

Devuelve true si QNetworkAccessManager está configurado actualmente para borrar automáticamente QNetworkReplies, false en caso contrario.

Véase también setAutoDeleteReplies y QNetworkRequest::AutoDeleteReplyOnFinishAttribute.

QAbstractNetworkCache *QNetworkAccessManager::cache() const

Devuelve la caché que se utiliza para almacenar los datos obtenidos de la red.

Véase también setCache().

void QNetworkAccessManager::clearAccessCache()

Vacía la caché interna de datos de autenticación y conexiones de red.

Esta función es útil para hacer pruebas automáticas.

Véase también clearConnectionCache().

void QNetworkAccessManager::clearConnectionCache()

Vacía la caché interna de conexiones de red. A diferencia de clearAccessCache(), los datos de autenticación se conservan.

Véase también clearAccessCache().

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

Inicia una conexión con el host indicado por hostName en el puerto port. Esta función es útil para completar el handshake TCP a un host antes de que se realice la petición HTTP, lo que resulta en una menor latencia de red.

Nota: Esta función no tiene posibilidad de informar de errores.

Véase también connectToHostEncrypted(), get(), post(), put(), y deleteResource().

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

Inicia una conexión con el host dado por hostName en el puerto port, utilizando sslConfiguration. Esta función es útil para completar el handshake TCP y SSL a un host antes de que se realice la petición HTTPS, resultando en una menor latencia de red.

Nota: Preconectar una conexión HTTP/2 puede hacerse llamando a setAllowedNextProtocols() en sslConfiguration con QSslConfiguration::ALPNProtocolHTTP2 contenido en la lista de protocolos permitidos. Cuando se utiliza HTTP/2, una única conexión por host es suficiente, es decir, llamar a este método varias veces por host no resultará en transacciones de red más rápidas.

Nota: Esta función no tiene posibilidad de informar de errores.

Véase también connectToHost(), get(), post(), put(), y deleteResource().

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

Inicia una conexión con el host dado por hostName en el puerto port, utilizando sslConfiguration con peerName configurado para ser el hostName utilizado para la validación del certificado. Esta función es útil para completar el handshake TCP y SSL a un host antes de que se realice la petición HTTPS, lo que resulta en una menor latencia de red.

Nota: Preconectar una conexión HTTP/2 puede hacerse llamando a setAllowedNextProtocols() en sslConfiguration con QSslConfiguration::ALPNProtocolHTTP2 contenido en la lista de protocolos permitidos. Cuando se utiliza HTTP/2, una única conexión por host es suficiente, es decir, llamar a este método varias veces por host no resultará en transacciones de red más rápidas.

Nota: Esta función no tiene posibilidad de informar de errores.

Se trata de una función sobrecargada.

Véase también connectToHost(), get(), post(), put(), y deleteResource().

QNetworkCookieJar *QNetworkAccessManager::cookieJar() const

Devuelve el QNetworkCookieJar que se utiliza para almacenar las cookies obtenidas de la red, así como las cookies que están a punto de ser enviadas.

Véase también setCookieJar().

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

Devuelve un nuevo objeto QNetworkReply para manejar la operación op y la petición originalReq. El dispositivo outgoingData es siempre 0 para las peticiones Get y Head, pero es el valor pasado a post() y put() en esas operaciones (las variantes QByteArray pasarán un objeto QBuffer ).

La implementación por defecto llama a QNetworkCookieJar::cookiesForUrl() en el tarro de cookies establecido con setCookieJar() para obtener las cookies que se enviarán al servidor remoto.

El objeto devuelto debe estar en estado abierto.

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

Envía una solicitud para eliminar el recurso identificado por la URL de request.

Nota: Esta función sólo está disponible actualmente para HTTP, realizando una petición HTTP DELETE.

Véase también get(), post(), put(), y sendCustomRequest().

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

Si enabled es true, la caché HSTS interna utilizará un almacén persistente para leer y escribir políticas HSTS. storeDir define dónde se ubicará este almacén. La ubicación por defecto se define en QStandardPaths::CacheLocation. Si no hay QStandartPaths::CacheLocation escribible y storeDir es una cadena vacía, el almacén se ubicará en el directorio de trabajo del programa.

Nota: Si la caché HSTS ya contiene políticas HSTS en el momento en que se habilita el almacenamiento persistente, estas políticas se conservarán en el almacenamiento. En caso de que tanto la caché como el almacén contengan los mismos hosts conocidos, se considerará que las políticas de la caché están más actualizadas (y, por tanto, sobrescribirán los valores anteriores en el almacén). Si no se desea este comportamiento, active el almacén HSTS antes de activar la seguridad estricta de transporte. Por defecto, el almacén persistente de políticas HSTS está desactivado.

Véase también isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled(), y QStandardPaths::standardLocations().

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

Esta señal se emite cuando una sesión SSL/TLS ha completado con éxito el handshake inicial. En este punto, no se ha transmitido ningún dato del usuario. La señal puede utilizarse para realizar comprobaciones adicionales en la cadena de certificados, por ejemplo para notificar a los usuarios cuando el certificado de un sitio web ha cambiado. El parámetro reply especifica qué respuesta de red es responsable. Si la respuesta no coincide con los criterios esperados, entonces debe ser abortada llamando a QNetworkReply::abort() por una ranura conectada a esta señal. La configuración SSL en uso puede inspeccionarse utilizando el método QNetworkReply::sslConfiguration().

Internamente, QNetworkAccessManager puede abrir múltiples conexiones a un servidor, para permitirle procesar peticiones en paralelo. Estas conexiones pueden ser reutilizadas, lo que significa que la señal encrypted() no sería emitida. Esto significa que sólo está garantizado recibir esta señal para la primera conexión a un sitio en la vida útil de QNetworkAccessManager.

Véase también QSslSocket::encrypted() y QNetworkReply::encrypted().

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

Esta señal se emite cada vez que finaliza una respuesta de red pendiente. El parámetro reply contendrá un puntero a la respuesta que acaba de finalizar. Esta señal se emite junto con la señal QNetworkReply::finished().

Consulte QNetworkReply::finished() para obtener información sobre el estado en el que se encontrará el objeto.

Nota: No elimine el objeto reply en la ranura conectada a esta señal. Utilice deleteLater().

Véase también QNetworkReply::finished() y QNetworkReply::error().

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

Envía una petición para obtener el contenido del request de destino y devuelve un nuevo objeto QNetworkReply abierto a la lectura que emite la señal readyRead() cada vez que llegan nuevos datos.

Se descargarán tanto los contenidos como las cabeceras asociadas.

Véase también post(), put(), deleteResource() y sendCustomRequest().

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

Nota: Una solicitud GET con un cuerpo de mensaje no se almacena en caché.

Nota: Si la petición se redirige, el cuerpo del mensaje se mantendrá sólo si el código de estado es 308.

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

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

Nota: Una solicitud GET con un cuerpo de mensaje no se almacena en caché.

Nota: Si la petición se redirige, el cuerpo del mensaje se mantendrá sólo si el código de estado es 308.

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

Envía una petición para obtener las cabeceras de red de request y devuelve un nuevo objeto QNetworkReply que contendrá dichas cabeceras.

La función recibe el nombre de la petición HTTP asociada (HEAD).

bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const

Devuelve true si se ha activado HTTP Strict Transport Security (HSTS). Por defecto, HSTS está desactivado.

Véase también setStrictTransportSecurityEnabled().

bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const

Devuelve true si la caché HSTS utiliza un almacén permanente para cargar y almacenar las políticas HSTS.

Véase también enableStrictTransportSecurityStore().

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

Envía una petición HTTP POST al destino especificado por request y devuelve un nuevo objeto QNetworkReply abierto para lectura que contendrá la respuesta enviada por el servidor. El contenido del objeto data se cargará en el servidor.

data debe estar abierto para lectura y debe permanecer válido hasta que se emita la señal finished() para esta respuesta.

Nota: El envío de una solicitud POST en protocolos distintos de HTTP y HTTPS no está definido y probablemente fallará.

Véase también get(), put(), deleteResource(), y sendCustomRequest().

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

Envía el contenido del mensaje multiPart al destino especificado por request.

Puede utilizarse para enviar mensajes MIME multiparte a través de HTTP.

Se trata de una función sobrecargada.

Véase también QHttpMultiPart, QHttpPart, y put().

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

Envía el contenido de la matriz de bytes data al destino especificado por request.

Se trata de una función sobrecargada.

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

Envía la petición POST especificada por request sin cuerpo y devuelve un nuevo objeto QNetworkReply.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.8.

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

Esta señal se emite si el handshake SSL/TLS negocia un ciphersuite PSK, y por lo tanto se requiere una autenticación PSK. El objeto reply es el QNetworkReply que está negociando tales ciphersuites.

Cuando se utiliza PSK, el cliente debe enviar al servidor una identidad válida y una clave precompartida válida, para que el handshake SSL pueda continuar. Las aplicaciones pueden proporcionar esta información en una ranura conectada a esta señal, rellenando el objeto authenticator pasado según sus necesidades.

Nota: Ignorar esta señal, o no proporcionar las credenciales requeridas, causará que el handshake falle, y por lo tanto que la conexión sea abortada.

Nota: El objeto authenticator es propiedad de la respuesta y no debe ser borrado por la aplicación.

Véase también QSslPreSharedKeyAuthenticator.

QNetworkProxy QNetworkAccessManager::proxy() const

Devuelve el QNetworkProxy que utilizarán las peticiones enviadas mediante este objeto QNetworkAccessManager. El valor por defecto del proxy es QNetworkProxy::DefaultProxy.

Véase también setProxy(), setProxyFactory(), y proxyAuthenticationRequired().

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

Esta señal se emite siempre que un proxy solicita autenticación y QNetworkAccessManager no puede encontrar una credencial válida almacenada en caché. La ranura conectada a esta señal debe rellenar las credenciales para el proxy proxy en el objeto authenticator.

QNetworkAccessManager almacenará en caché las credenciales internamente. La próxima vez que el proxy solicite autenticación, QNetworkAccessManager enviará automáticamente la misma credencial sin volver a emitir la señal proxyAuthenticationRequired.

Si el proxy rechaza las credenciales, QNetworkAccessManager volverá a emitir la señal.

Véase también proxy(), setProxy(), y authenticationRequired().

QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const

Devuelve la fábrica de proxies que este objeto QNetworkAccessManager está utilizando para determinar los proxies a utilizar para las peticiones.

Tenga en cuenta que el puntero devuelto por esta función es gestionado por QNetworkAccessManager y podría ser eliminado en cualquier momento.

Véase también setProxyFactory() y proxy().

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

Sube el contenido de data al destino request y devuelve un nuevo objeto QNetworkReply que estará abierto para respuesta.

data debe estar abierto para lectura cuando se llame a esta función y debe permanecer válido hasta que se emita la señal finished() para esta respuesta.

Que haya algo disponible para leer del objeto devuelto depende del protocolo. Para HTTP, el servidor puede enviar una pequeña página HTML indicando que la carga se ha realizado correctamente (o no). Otros protocolos probablemente tendrán contenido en sus respuestas.

Nota: Para HTTP, esta petición enviará una petición PUT, que la mayoría de los servidores no permiten. Los mecanismos de carga de formularios, incluido el de carga de archivos a través de formularios HTML, utilizan el mecanismo POST.

Véase también get(), post(), deleteResource(), y sendCustomRequest().

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

Envía el contenido del mensaje multiPart al destino especificado por request.

Puede utilizarse para enviar mensajes MIME multiparte a través de HTTP.

Se trata de una función sobrecargada.

Véase también QHttpMultiPart, QHttpPart, y post().

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

Envía el contenido de la matriz de bytes data al destino especificado por request.

Se trata de una función sobrecargada.

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

Envía la petición PUT especificada por request sin cuerpo y devuelve un nuevo objeto QNetworkReply.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.8.

QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const

Devuelve la política de redirección que se utiliza al crear nuevas peticiones.

Véase también setRedirectPolicy() y QNetworkRequest::RedirectPolicy.

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

Envía una petición personalizada al servidor identificado por la URL de request.

Es responsabilidad del usuario enviar un verb al servidor que sea válido según la especificación HTTP.

Este método proporciona medios para enviar verbos distintos de los comunes proporcionados a través de get() o post() etc., por ejemplo enviando un comando HTTP OPTIONS.

Si data no está vacío, el contenido de data se cargará en el servidor; en ese caso, los datos deben estar abiertos para la lectura y deben permanecer válidos hasta que se emita la señal finished() para esta respuesta.

Nota: Esta función sólo está disponible actualmente para HTTP(S).

Véase también get(), post(), put() y deleteResource().

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

Envía una petición personalizada al servidor identificado por la URL de request.

Envía el contenido del mensaje multiPart al destino especificado por request.

Puede utilizarse para enviar mensajes MIME multiparte para verbos personalizados.

Se trata de una función sobrecargada.

Véase también QHttpMultiPart, QHttpPart, y put().

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

Envía el contenido de la matriz de bytes data al destino especificado por request.

Se trata de una función sobrecargada.

void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)

Activa o desactiva la eliminación automática de QNetworkReplies.

Establecer shouldAutoDelete en true es lo mismo que establecer el atributo QNetworkRequest::AutoDeleteReplyOnFinishAttribute en true en todos los futuros QNetworkRequests pasados a esta instancia de QNetworkAccessManager a menos que el atributo ya estuviera explícitamente establecido en QNetworkRequest.

Véase también autoDeleteReplies y QNetworkRequest::AutoDeleteReplyOnFinishAttribute.

void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)

Establece la caché de red del gestor en la dirección cache especificada. La caché se utiliza para todas las peticiones enviadas por el gestor.

Utilice esta función para establecer el objeto caché de red a una clase que implemente características adicionales, como guardar las cookies en un almacenamiento permanente.

Nota: QNetworkAccessManager toma posesión del objeto cache.

QNetworkAccessManager por defecto no tiene una caché establecida. Qt proporciona una caché de disco simple, QNetworkDiskCache, que puede ser utilizada.

Véase también cache() y QNetworkRequest::CacheLoadControl.

void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)

Establece el cookie jar del gestor en la dirección cookieJar especificada. El cookie jar es utilizado por todas las peticiones enviadas por el gestor.

Utilice esta función para establecer el objeto cookie jar a una clase que implemente características adicionales, como guardar las cookies en un almacenamiento permanente.

Nota: QNetworkAccessManager toma posesión del objeto cookieJar.

Si cookieJar está en el mismo hilo que este QNetworkAccessManager, establecerá el padre de cookieJar para que el cookie jar sea borrado cuando este objeto sea borrado también. Si desea compartir tarros de cookies entre diferentes objetos QNetworkAccessManager, puede establecer el padre del tarro de cookies a 0 después de llamar a esta función.

QNetworkAccessManager por defecto no implementa ninguna política de cookies propia: acepta todas las cookies enviadas por el servidor, siempre que estén bien formadas y cumplan los requisitos mínimos de seguridad (el dominio de la cookie coincide con el de la petición y la ruta de la cookie coincide con la de la petición). Para implementar su propia política de seguridad, anule las funciones virtuales QNetworkCookieJar::cookiesForUrl() y QNetworkCookieJar::setCookiesFromUrl(). Estas funciones son llamadas por QNetworkAccessManager cuando detecta una nueva cookie.

Véase también cookieJar(), QNetworkCookieJar::cookiesForUrl(), y QNetworkCookieJar::setCookiesFromUrl().

void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)

Establece el proxy que se utilizará en futuras peticiones a proxy. Esto no afecta a las peticiones ya enviadas. Se emitirá la señal proxyAuthenticationRequired() si el proxy solicita autenticación.

Un proxy establecido con esta función se utilizará para todas las peticiones emitidas por QNetworkAccessManager. En algunos casos, puede ser necesario seleccionar diferentes proxies dependiendo del tipo de petición que se envíe o del host de destino. Si ese es el caso, deberías considerar el uso de setProxyFactory().

Véase también proxy() y proxyAuthenticationRequired().

void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)

Establece la fábrica de proxies para que esta clase sea factory. Una fábrica de proxies se utiliza para determinar una lista más específica de proxies que se utilizarán para una solicitud determinada, en lugar de intentar utilizar el mismo valor de proxy para todas las solicitudes.

Todas las peticiones enviadas por QNetworkAccessManager tendrán el tipo QNetworkProxyQuery::UrlRequest.

Por ejemplo, una fábrica de proxies podría aplicar las siguientes reglas

  • si la dirección de destino está en la red local (por ejemplo, si el nombre de host no contiene puntos o si es una dirección IP dentro del rango de la organización), devuelve QNetworkProxy::NoProxy
  • si la solicitud es FTP, devuelve un proxy FTP
  • si la solicitud es HTTP o HTTPS, devuelve un proxy HTTP
  • en caso contrario, devuelve un servidor proxy SOCKSv5

El tiempo de vida del objeto factory será gestionado por QNetworkAccessManager. Eliminará el objeto cuando sea necesario.

Nota: Si se establece un proxy específico con setProxy(), no se utilizará la fábrica.

Véase también proxyFactory(), setProxy(), y QNetworkProxyQuery.

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

Establece la política de redirección del gestor para que sea la policy especificada. Esta política afectará a todas las peticiones posteriores creadas por el gestor.

Utilice esta función para activar o desactivar las redirecciones HTTP en el nivel del gestor.

Nota: Cuando se crea una petición QNetworkRequest::RedirectAttributePolicy tiene la prioridad más alta, seguida por prioridad de la política del gestor.

El valor por defecto es QNetworkRequest::NoLessSafeRedirectPolicy. Se recomienda a los clientes que confíen en la gestión manual de redirecciones que establezcan esta política explícitamente en su código.

Véase también redirectPolicy() y QNetworkRequest::RedirectPolicy.

void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)

Si enabled es true, QNetworkAccessManager sigue la política HTTP Strict Transport Security (HSTS, RFC6797). Al procesar una petición, QNetworkAccessManager sustituye automáticamente el esquema "http" por "https" y utiliza un transporte seguro para los hosts HSTS. Si se configura explícitamente, el puerto 80 se sustituye por el 443.

Cuando HSTS está activado, por cada respuesta HTTP que contenga una cabecera HSTS y se reciba a través de un transporte seguro, QNetworkAccessManager actualizará su caché HSTS, recordando un host con una política válida o eliminando un host con una política HSTS caducada o desactivada.

Véase también isStrictTransportSecurityEnabled().

void QNetworkAccessManager::setTransferTimeout(int timeout)

Establece timeout como el tiempo de espera de transferencia en milisegundos.

Véase también setTransferTimeout(std::chrono::milliseconds), transferTimeout() y transferTimeoutAsDuration().

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

Establece el tiempo de espera duration para abortar la transferencia si no se intercambian datos.

Las transferencias se abortan si no se transfieren bytes antes de que expire el tiempo de espera. Cero significa que no se establece ningún temporizador. Si no se proporciona ningún argumento, el tiempo de espera es QNetworkRequest::DefaultTransferTimeout. Si no se llama a esta función, el tiempo de espera se desactiva y tiene el valor cero. Los tiempos de espera distintos de cero específicos de las peticiones que se ejecutan anulan este valor. Esto significa que si QNetworkAccessManager tiene un tiempo de espera activado, es necesario desactivarlo para ejecutar una petición sin tiempo de espera.

Esta función se introdujo en Qt 6.7.

Véase también transferTimeoutAsDuration().

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

Esta señal se emite si la sesión SSL/TLS ha encontrado errores durante la configuración, incluyendo errores de verificación de certificados. El parámetro errors contiene la lista de errores y reply es el QNetworkReply que está encontrando estos errores.

Para indicar que los errores no son fatales y que la conexión debe continuar, la función QNetworkReply::ignoreSslErrors() debe ser llamada desde la ranura conectada a esta señal. Si no se llama, la sesión SSL se romperá antes de que se intercambie ningún dato (incluida la URL).

Esta señal puede utilizarse para mostrar un mensaje de error al usuario indicando que la seguridad puede estar comprometida y mostrar la configuración SSL (véase sslConfiguration() para obtenerla). Si el usuario decide continuar después de analizar el certificado remoto, la ranura debe llamar a ignoreSslErrors().

Véase también QSslSocket::sslErrors(), QNetworkReply::sslErrors(), QNetworkReply::sslConfiguration(), y QNetworkReply::ignoreSslErrors().

QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const

Devuelve la lista de políticas HTTP Strict Transport Security. Esta lista puede diferir de la que se estableció inicialmente a través de addStrictTransportSecurityHosts() si la caché HSTS se actualizó a partir de una cabecera de respuesta "Strict-Transport-Security".

Véase también addStrictTransportSecurityHosts() y QHstsPolicy.

[virtual] QStringList QNetworkAccessManager::supportedSchemes() const

Lista todos los esquemas de URL soportados por el gestor de acceso.

Reimplemente este método para proporcionar sus propios esquemas soportados en una subclase de QNetworkAccessManager. Por ejemplo, es necesario cuando tu subclase proporciona soporte para nuevos protocolos.

int QNetworkAccessManager::transferTimeout() const

Devuelve el tiempo de espera utilizado para las transferencias, en milisegundos.

Véase también setTransferTimeout().

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

Devuelve la duración del tiempo de espera tras el cual se cancela la transferencia si no se intercambian datos.

La duración por defecto es cero, lo que significa que el tiempo de espera no se utiliza.

Esta función se introdujo en Qt 6.7.

Véase también 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.