Класс QNetworkAccessManager
Класс QNetworkAccessManager позволяет приложению отправлять сетевые запросы и получать ответы. Подробнее...
| Заголовок: | #include <QNetworkAccessManager> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Наследует: | QObject |
Примечание: Все функции в этом классе являются повторно входящими.
Открытые типы
| Перечисление | Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation } |
Открытые функции
| 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) |
| QNetworkReply * | head(const QNetworkRequest &request) |
| bool | isStrictTransportSecurityEnabled() const |
| bool | isStrictTransportSecurityStoreEnabled() const |
| QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkProxy | proxy() const |
| QNetworkProxyFactory * | proxyFactory() const |
| QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkRequest::RedirectPolicy | redirectPolicy() const |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart) |
| 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 = QNetworkRequest::DefaultTransferTimeoutConstant) |
| QList<QHstsPolicy> | strictTransportSecurityHosts() const |
| virtual QStringList | supportedSchemes() const |
| int | transferTimeout() const |
Сигналы
| 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) |
Защищённые функции
| virtual QNetworkReply * | createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr) |
Подробное описание
API доступа к сети построен вокруг объекта QNetworkAccessManager, который хранит общие настройки и параметры для отправляемых им запросов. Он содержит конфигурацию прокси и кэша, а также сигналы, связанные с такими проблемами, и сигналы ответа, которые могут использоваться для отслеживания прогресса сетевой операции. Один экземпляр QNetworkAccessManager должен быть достаточным для всего приложения Qt. Поскольку QNetworkAccessManager основан на QObject, он может использоваться только из потока, к которому он принадлежит.
После создания объекта QNetworkAccessManager приложение может использовать его для отправки запросов по сети. Предоставлен набор стандартных функций, которые принимают запрос и необязательные данные, и каждая возвращает объект QNetworkReply. Возвращаемый объект используется для получения любых данных, возвращённых в ответ на соответствующий запрос.
Простой загрузкой из сети можно добиться с помощью:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); QNetworkAccessManager имеет асинхронный API. Когда вызывается слот replyFinished выше, параметр, который он принимает, это объект QNetworkReply, содержащий загруженные данные, а также метаданные (заголовки и т. д.).
Примечание: После завершения запроса пользователь отвечает за удаление объекта QNetworkReply в подходящее время. Не удаляйте его напрямую внутри слота, подключенного к finished(). Используйте функцию deleteLater().
Примечание: QNetworkAccessManager помещает полученные запросы в очередь. Количество запросов, выполняемых параллельно, зависит от протокола. В настоящее время для HTTP-протокола на настольных платформах 6 запросов выполняются параллельно для одной комбинации хост/порт.
Более сложный пример, предполагая, что менеджер уже существует, может быть таким:
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); См. также QNetworkRequest, QNetworkReply и QNetworkProxy.
Документация по типам членов
Перечисление QNetworkAccessManager::Operation
Указывает операцию, обрабатываемую этим ответом.
| Постоянная | Значение | Описание |
|---|---|---|
QNetworkAccessManager::HeadOperation |
1 |
операция извлечения заголовков (создана с помощью head()) |
QNetworkAccessManager::GetOperation |
2 |
извлечение заголовков и загрузка содержимого (создано с помощью get()) |
QNetworkAccessManager::PutOperation |
3 |
операция загрузки содержимого (создана с помощью put()) |
QNetworkAccessManager::PostOperation |
4 |
отправка содержимого HTML-формы для обработки с помощью HTTP POST (создано с помощью post()) |
QNetworkAccessManager::DeleteOperation |
5 |
операция удаления содержимого (создана с помощью deleteResource()) |
QNetworkAccessManager::CustomOperation |
6 |
пользовательская операция (создана с помощью sendCustomRequest()) |
См. также QNetworkReply::operation().
Документация по функциям членов
QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)
Создаёт объект QNetworkAccessManager, который является центром API доступа к сети, и устанавливает parent в качестве родительского объекта.
Требуется аутентификацияvoid QNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
Этот сигнал излучается всякий раз, когда конечный сервер требует аутентификации перед предоставлением запрошенного содержимого. Слот, подключённый к этому сигналу, должен заполнить данные для содержимого (которые можно определить, проверив объект reply) в объекте authenticator.
QNetworkAccessManager будет кешировать данные аутентификации и будет отправлять те же значения, если сервер снова потребует аутентификации, без излучения сигнала authenticationRequired(). Если данные аутентификации будут отклонены, этот сигнал будет излучен снова.
Примечание: Чтобы запрос не отправлял данные аутентификации, вы не должны вызывать setUser() или setPassword() в объекте authenticator. Это приведёт к излучению сигнала finished() с объектом QNetworkReply с ошибкой AuthenticationRequiredError.
Примечание: Невозможно использовать QueuedConnection для подключения к этому сигналу, поскольку подключение завершится неудачно, если аутентификатор не заполнен новой информацией при возвращении сигнала.
См. также proxyAuthenticationRequired(), QAuthenticator::setUser() и QAuthenticator::setPassword().
Зашифрованоvoid QNetworkAccessManager::encrypted(QNetworkReply *reply)
Этот сигнал излучается, когда сеанс SSL/TLS успешно завершил первоначальный обмен данными. В этот момент не было передано никаких данных пользователя. Сигнал может использоваться для выполнения дополнительных проверок цепочки сертификатов, например, для уведомления пользователей, когда изменился сертификат веб-сайта. Параметр reply указывает, какой сетевой ответ отвечает. Если ответ не соответствует ожидаемым критериям, он должен быть прерван вызовом QNetworkReply::abort() слотом, подключённым к этому сигналу. Конфигурацию SSL, используемую в настоящее время, можно проверить с помощью метода QNetworkReply::sslConfiguration().
Внутренне QNetworkAccessManager может открывать несколько подключений к серверу, чтобы позволить ему обрабатывать запросы параллельно. Эти подключения могут быть повторно использованы, что означает, что сигнал encrypted() не будет излучаться. Это означает, что вы гарантировано получите этот сигнал только для первого подключения к сайту на протяжении всего жизненного цикла QNetworkAccessManager.
Эта функция была представлена в Qt 5.1.
См. также QSslSocket::encrypted() и QNetworkReply::encrypted().
Завершёнvoid QNetworkAccessManager::finished(QNetworkReply *reply)
Этот сигнал излучается всякий раз, когда завершается ожидающий сетевой ответ. Параметр reply будет содержать указатель на ответ, который только что завершился. Этот сигнал излучается совместно с сигналом QNetworkReply::finished().
См. QNetworkReply::finished() для получения информации о состоянии объекта.
Примечание: Не удаляйте объект reply в слоте, подключённом к этому сигналу. Используйте deleteLater().
См. также QNetworkReply::finished() и QNetworkReply::error().
Требуется аутентификация предварительного общего ключаvoid QNetworkAccessManager::preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
Этот сигнал излучается, если обмен данными SSL/TLS согласуется с криптографическим набором PSK, а затем требуется аутентификация PSK. Объект reply — это QNetworkReply, который согласовывает такие криптографические наборы.
При использовании PSK клиент должен отправить серверу действительный идентификатор и действительный предварительный общий ключ, чтобы обмен данными SSL продолжился. Приложения могут предоставить эту информацию в слоте, подключённом к этому сигналу, заполнив переданный объект authenticator в соответствии со своими потребностями.
Примечание: Игнорирование этого сигнала или отсутствие необходимых учетных данных приведет к сбою рукопожатия и, следовательно, к прерыванию соединения.
Примечание: Объект authenticator принадлежит ответу и не должен удаляться приложением.
Эта функция была добавлена в Qt 5.5.
См. также QSslPreSharedKeyAuthenticator.
[signal] void QNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Этот сигнал излучается всякий раз, когда прокси запрашивает аутентификацию, и QNetworkAccessManager не может найти действительные, кэшированные учетные данные. Слот, подключенный к этому сигналу, должен заполнить учетные данные для прокси proxy в объекте authenticator.
QNetworkAccessManager будет кэшировать учетные данные внутри. В следующий раз, когда прокси затребует аутентификацию, QNetworkAccessManager автоматически отправит те же учетные данные, не излучая сигнал proxyAuthenticationRequired повторно.
Если прокси отклонит учетные данные, QNetworkAccessManager повторно излучит сигнал.
См. также proxy(), setProxy() и authenticationRequired().
[signal] void QNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
Этот сигнал излучается, если сеанс SSL/TLS столкнулся с ошибками во время настройки, включая ошибки проверки сертификата. Параметр errors содержит список ошибок, а reply — это QNetworkReply, который сталкивается с этими ошибками.
Чтобы указать, что ошибки не являются фатальными и что соединение должно быть продолжено, функция QNetworkReply::ignoreSslErrors() должна быть вызвана из слота, подключенного к этому сигналу. Если этого не сделать, сеанс SSL будет прерван до обмена данными (включая URL).
Этот сигнал можно использовать для отображения сообщения об ошибке пользователю, указывающего на то, что безопасность может быть нарушена, и отображения настроек SSL (см. sslConfiguration() для получения настроек). Если пользователь решит продолжить после анализа удалённого сертификата, в слоте следует вызвать ignoreSslErrors().
См. также QSslSocket::sslErrors(), QNetworkReply::sslErrors(), QNetworkReply::sslConfiguration() и QNetworkReply::ignoreSslErrors().
[virtual] QNetworkAccessManager::~QNetworkAccessManager()
Удаляет объект QNetworkAccessManager и освобождает все ресурсы. Обратите внимание, что объекты QNetworkReply, возвращаемые этим классом, имеют этот объект в качестве родительского, что означает, что они будут удалены вместе с ним, если вы не вызовете QObject::setParent() для них.
[since 5.9] void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
Добавляет политики HTTP Strict Transport Security в кэш HSTS. knownHosts содержит известные хосты с информацией QHstsPolicy.
Примечание: Истекшая политика удалит известный хост из кэша, если он был ранее присутствовал.
Примечание: Во время обработки HTTP-ответов QNetworkAccessManager также может обновлять кэш HSTS, удаляя или обновляя существующие политики или добавляя новые knownHosts. Таким образом, текущая реализация основана на сервере, код клиента может предоставить QNetworkAccessManager с ранее известными или обнаруженными политиками, но эта информация может быть перезаписана заголовками ответа "Strict-Transport-Security".
Эта функция была добавлена в Qt 5.9.
См. также addStrictTransportSecurityHosts(), enableStrictTransportSecurityStore() и QHstsPolicy.
[since 5.14] bool QNetworkAccessManager::autoDeleteReplies() const
Возвращает true, если QNetworkAccessManager в настоящее время настроен на автоматическое удаление QNetworkReplies, в противном случае — false.
Эта функция была добавлена в Qt 5.14.
См. также setAutoDeleteReplies и QNetworkRequest::AutoDeleteReplyOnFinishAttribute.
QAbstractNetworkCache *QNetworkAccessManager::cache() const
Возвращает кэш, используемый для хранения данных, полученных из сети.
См. также setCache().
[since 5.0] void QNetworkAccessManager::clearAccessCache()
Очищает внутренний кэш данных аутентификации и сетевых соединений.
Эта функция полезна для выполнения автоматических тестов.
Эта функция была добавлена в Qt 5.0.
См. также clearConnectionCache().
[since 5.9] void QNetworkAccessManager::clearConnectionCache()
Очищает внутренний кэш сетевых соединений. В отличие от clearAccessCache(), данные аутентификации сохраняются.
Эта функция была добавлена в Qt 5.9.
См. также clearAccessCache().
[since 5.2] void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)
Инициализирует соединение с хостом, заданным hostName на порту port. Эта функция полезна для завершения TCP-рукопожатия с хостом перед отправкой HTTP-запроса, что приводит к меньшей задержке в сети.
Примечание: Эта функция не предоставляет возможности сообщать об ошибках.
Эта функция была добавлена в Qt 5.2.
См. также connectToHostEncrypted(), get(), post(), put() и deleteResource().
[since 5.2] void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
Инициализирует соединение с хостом, заданным hostName на порту port, используя sslConfiguration. Эта функция полезна для завершения TCP и SSL-рукопожатия с хостом перед отправкой HTTPS-запроса, что приводит к меньшей задержке в сети.
Примечание: Преподключение соединения HTTP/2 можно выполнить, вызвав setAllowedNextProtocols() на sslConfiguration с QSslConfiguration::ALPNProtocolHTTP2, содержащимся в списке разрешенных протоколов. При использовании HTTP/2 достаточно одного соединения на хост, т.е. вызов этого метода несколько раз для одного хоста не приведет к более быстрым сетевым операциям.
Примечание: Эта функция не предоставляет возможности сообщать об ошибках.
Эта функция была добавлена в Qt 5.2.
См. также connectToHost(), get(), post(), put() и deleteResource().
[since 5.13] void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
Это перегруженная функция.
Инициализирует соединение с хостом, заданным hostName на порту port, используя sslConfiguration с peerName, установленным в качестве имени хоста, используемого для проверки сертификата. Эта функция полезна для завершения TCP и SSL-рукопожатия с хостом перед отправкой HTTPS-запроса, что приводит к меньшей задержке в сети.
Примечание: Преподключение соединения HTTP/2 можно выполнить, вызвав setAllowedNextProtocols() на sslConfiguration с QSslConfiguration::ALPNProtocolHTTP2, содержащимся в списке разрешенных протоколов. При использовании HTTP/2 достаточно одного соединения на хост, т.е. вызов этого метода несколько раз для одного хоста не приведет к более быстрым сетевым операциям.
Примечание: Эта функция не предоставляет возможности сообщать об ошибках.
Эта функция была добавлена в Qt 5.13.
См. также connectToHost(), get(), post(), put() и deleteResource().
QNetworkCookieJar *QNetworkAccessManager::cookieJar() const
Возвращает QNetworkCookieJar, используемый для хранения cookie, полученных из сети, а также cookie, которые скоро будут отправлены.
См. также setCookieJar().
[virtual protected] QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)
Возвращает новый объект QNetworkReply для обработки операции op и запроса originalReq. Устройство outgoingData всегда равно 0 для запросов Get и Head, но имеет значение, переданное в post() и put() в этих операциях (варианты QByteArray передают объект QBuffer).
Реализация по умолчанию вызывает QNetworkCookieJar::cookiesForUrl() для cookie-журнала, установленного с помощью setCookieJar(), чтобы получить cookie для отправки на удалённый сервер.
Возвращаемый объект должен быть в открытом состоянии.
QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)
Отправляет запрос на удаление ресурса, идентифицируемого URL из request.
Примечание: Эта функция в настоящее время доступна только для HTTP, выполняя запрос HTTP DELETE.
См. также get(), post(), put() и sendCustomRequest().
[since 5.10] void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
Если enabled равно true, внутренший кеш HSTS будет использовать постоянное хранилище для чтения и записи политик HSTS. storeDir определяет расположение этого хранилища. По умолчанию расположение определяется QStandardPaths::CacheLocation. Если нет доступного для записи QStandartPaths::CacheLocation и storeDir пустая, хранилище будет расположено в рабочей директории программы.
Примечание: Если кэш HSTS уже содержит политики HSTS к моменту включения постоянного хранилища, эти политики будут сохранены в хранилище. В случае, если и кэш, и хранилище содержат одни и те же известные хосты, политики из кэша считаются более актуальными (и, следовательно, перезапишут предыдущие значения в хранилище). Если это поведение нежелательно, включите хранилище HSTS перед включением Strict Transport Security. По умолчанию постоянное хранилище политик HSTS отключено.
Эта функция была добавлена в Qt 5.10.
См. также isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled() и QStandardPaths::standardLocations().
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
Отправляет запрос на получение содержимого целевого request и возвращает новый объект QNetworkReply, открытый для чтения, который излучает сигнал readyRead() всякий раз, когда поступают новые данные.
Содержимое и связанные заголовки будут загружены.
См. также post(), put(), deleteResource() и sendCustomRequest().
QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request)
Отправляет запрос на получение сетевых заголовков для request и возвращает новый объект QNetworkReply, который будет содержать эти заголовки.
Функция названа в соответствии с соответствующим запросом HTTP (HEAD).
[since 5.9] bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
Возвращает true, если HTTP Strict Transport Security (HSTS) был включён. По умолчанию HSTS отключён.
Эта функция была добавлена в Qt 5.9.
См. также setStrictTransportSecurityEnabled().
[since 5.10] bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
Возвращает true, если кеш HSTS использует постоянное хранилище для загрузки и сохранения политик HSTS.
Эта функция была добавлена в Qt 5.10.
См. также enableStrictTransportSecurityStore().
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODevice *data)
Отправляет запрос HTTP POST на целевой ресурс, указанный в request, и возвращает новый объект QNetworkReply, открытый для чтения, содержащий ответ сервера. Содержимое устройства data будет загружено на сервер.
data должен быть открыт для чтения и должен оставаться валидным до тех пор, пока не будет излучен сигнал finished() для этого ответа.
Примечание: Отправка запроса POST на протоколах, отличных от HTTP и HTTPS, не определена и, вероятно, завершится ошибкой.
См. также get(), put(), deleteResource() и sendCustomRequest().
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data)
Это перегруженная функция.
Отправляет содержимое массива байт data на целевой ресурс, указанный в request.
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
Это перегруженная функция.
Отправляет содержимое сообщения multiPart на целевой ресурс, указанный в request.
Это можно использовать для отправки сообщений MIME multipart по протоколу HTTP.
См. также QHttpMultiPart, QHttpPart и put().
QNetworkProxy QNetworkAccessManager::proxy() const
Возвращает QNetworkProxy, который будут использовать запросы, отправленные с помощью этого объекта QNetworkAccessManager. Значение по умолчанию для прокси — QNetworkProxy::DefaultProxy.
См. также setProxy(), setProxyFactory() и proxyAuthenticationRequired().
QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const
Возвращает фабрику прокси, используемую этим объектом QNetworkAccessManager для определения прокси, которые будут использоваться для запросов.
Обратите внимание, что указатель, возвращаемый этой функцией, управляется QNetworkAccessManager и может быть удалён в любое время.
См. также setProxyFactory() и proxy().
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)
Загружает содержимое data на целевой ресурс request и возвращает новый объект QNetworkReply, открытый для ответа.
data должен быть открыт для чтения при вызове этой функции и должен оставаться валидным до тех пор, пока не будет излучен сигнал finished() для этого ответа.
Будет ли доступно что-либо для чтения из возвращаемого объекта, зависит от протокола. Для HTTP сервер может отправить небольшую HTML-страницу, указывающую, была ли загрузка успешной (или нет). Другие протоколы, вероятно, будут иметь содержимое в своих ответах.
Примечание: Для HTTP этот запрос отправит запрос PUT, который большинство серверов не поддерживают. Механизмы отправки форм, включая отправку файлов через HTML-формы, используют механизм POST.
См. также get(), post(), deleteResource() и sendCustomRequest().
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data)
Это перегруженная функция.
Отправляет содержимое массива байт data на целевой ресурс, указанный в request.
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
Это перегруженный метод.
Отправляет содержимое сообщения multiPart по адресу, указанному в request.
Это можно использовать для отправки сообщений MIME multipart по протоколу HTTP.
См. также QHttpMultiPart, QHttpPart и post().
[since 5.9] QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
Возвращает политику перенаправления, используемую при создании новых запросов.
Эта функция была добавлена в Qt 5.9.
См. также setRedirectPolicy() и QNetworkRequest::RedirectPolicy.
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)
Отправляет пользовательский запрос на сервер, идентифицированный URL-адресом в request.
Пользователь отвечает за отправку серверу verb, который является допустимым согласно спецификации HTTP.
Этот метод предоставляет возможность отправлять запросы с другими глаголами, помимо стандартных, предоставляемых через get() или post() и т.д., например, отправку команды HTTP OPTIONS.
Если data не пусто, содержимое устройства data будет загружено на сервер. В этом случае устройство data должно быть открыто для чтения и оставаться валидным до тех пор, пока для этого ответа не будет отправлен сигнал finished().
Примечание: Эта функция в настоящее время доступна только для HTTP(S).
См. также get(), post(), put() и deleteResource().
[since 5.8] QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
Это перегруженный метод.
Отправляет содержимое массива байтов data по адресу, указанному в request.
Эта функция была добавлена в Qt 5.8.
[since 5.8] QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)
Это перегруженный метод.
Отправляет пользовательский запрос на сервер, идентифицированный URL-адресом в request.
Отправляет содержимое сообщения multiPart по адресу, указанному в request.
Это можно использовать для отправки сообщений MIME multipart для пользовательских глаголов.
Эта функция была добавлена в Qt 5.8.
См. также QHttpMultiPart, QHttpPart и put().
[since 5.14] void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)
Включает или отключает автоматическое удаление QNetworkReplies.
Установить shouldAutoDelete в значение true — это то же самое, что установить атрибут QNetworkRequest::AutoDeleteReplyOnFinishAttribute в значение true для всех будущих QNetworkRequests, передаваемых в этот экземпляр QNetworkAccessManager, если этот атрибут не был явно задан для QNetworkRequest.
Эта функция была добавлена в Qt 5.14.
См. также autoDeleteReplies и QNetworkRequest::AutoDeleteReplyOnFinishAttribute.
void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)
Устанавливает кэш сети менеджера в указанный cache. Кэш используется для всех запросов, отправленных менеджером.
Используйте эту функцию для установки объекта кэша сети в класс, который реализует дополнительные функции, такие как сохранение куки в постоянное хранилище.
Примечание: QNetworkAccessManager принимает владение объектом cache.
QNetworkAccessManager по умолчанию не имеет установленного кэша. Qt предоставляет простой дисковый кэш, QNetworkDiskCache, который можно использовать.
См. также cache() и QNetworkRequest::CacheLoadControl.
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
Устанавливает хранилище куки менеджера в указанный cookieJar. Хранилище куки используется всеми запросами, отправленными менеджером.
Используйте эту функцию для установки объекта хранилища куки в класс, который реализует дополнительные функции, такие как сохранение куки в постоянное хранилище.
Примечание: QNetworkAccessManager принимает владение объектом cookieJar.
Если cookieJar находится в том же потоке, что и этот QNetworkAccessManager, он установит родительский объект для cookieJar, чтобы хранилище куки было удалено при удалении этого объекта. Если вы хотите использовать хранилища куки для разных объектов QNetworkAccessManager, вы можете установить родителя хранилища куки в 0 после вызова этой функции.
QNetworkAccessManager по умолчанию не реализует никакой собственной политики куки: он принимает все куки, отправленные сервером, при условии, что они хорошо сформированы и удовлетворяют минимальным требованиям безопасности (домен куки соответствует запросу и путь куки соответствует запросу). Чтобы реализовать собственную политику безопасности, переопределите виртуальные функции QNetworkCookieJar::cookiesForUrl() и QNetworkCookieJar::setCookiesFromUrl(). Эти функции вызываются QNetworkAccessManager, когда он обнаруживает новую куки.
См. также cookieJar(), QNetworkCookieJar::cookiesForUrl() и QNetworkCookieJar::setCookiesFromUrl().
void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)
Устанавливает прокси для будущих запросов в proxy. Это не повлияет на запросы, которые уже были отправлены. Сигнал proxyAuthenticationRequired() будет выпущен, если прокси запросит аутентификацию.
Прокси, установленный с помощью этой функции, будет использоваться для всех запросов, отправленных QNetworkAccessManager. В некоторых случаях может потребоваться выбрать разные прокси в зависимости от типа отправляемого запроса или целевого хоста. В этом случае следует использовать setProxyFactory().
См. также proxy() и proxyAuthenticationRequired().
void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)
Устанавливает фабрику прокси для этого класса в factory. Фабрика прокси используется для определения более конкретного списка прокси, используемых для данного запроса, вместо попытки использовать одно и то же значение прокси для всех запросов.
Все запросы, отправленные QNetworkAccessManager, будут иметь тип QNetworkProxyQuery::UrlRequest.
Например, фабрика прокси может применять следующие правила:
- если целевой адрес находится в локальной сети (например, если имя хоста не содержит точек или это IP-адрес в диапазоне организации), вернуть QNetworkProxy::NoProxy
- если запрос FTP, вернуть прокси FTP
- если запрос HTTP или HTTPS, вернуть прокси HTTP
- в противном случае вернуть прокси-сервер SOCKSv5
Срок службы объекта factory будет управляться QNetworkAccessManager. Он удалит объект при необходимости.
Примечание: Если конкретный прокси установлен с помощью setProxy(), фабрика не будет использоваться.
См. также proxyFactory(), setProxy() и QNetworkProxyQuery.
[since 5.9] void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
Устанавливает политику перенаправления менеджера в указанную policy. Эта политика будет влиять на все последующие запросы, созданные менеджером.
Используйте эту функцию для включения или отключения HTTP-перенаправлений на уровне менеджера.
Примечание: При создании запроса QNetworkRequest::RedirectAttributePolicy имеет наивысший приоритет, затем — политика менеджера.
Значение по умолчанию — QNetworkRequest::NoLessSafeRedirectPolicy. Клиентам, использующим ручное управление переадресацией, рекомендуется явно установить эту политику в своём коде.
Данная функция была добавлена в Qt 5.9.
См. также redirectPolicy() и QNetworkRequest::RedirectPolicy.
[since 5.9] void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)
Если enabled равно true, QNetworkAccessManager следует политике HTTP Strict Transport Security (HSTS, RFC6797). При обработке запроса QNetworkAccessManager автоматически заменяет схему "http" на "https" и использует защищённый транспорт для хостов HSTS. Если значение явно установлено, порт 80 заменяется на порт 443.
Когда HSTS включена, для каждого HTTP ответа, содержащего заголовок HSTS и полученного по защищённому каналу, QNetworkAccessManager обновит кэш HSTS, либо запомнив хост с действительной политикой, либо удалив хост с истекшей или отключенной политикой HSTS.
Данная функция была добавлена в Qt 5.9.
См. также isStrictTransportSecurityEnabled().
[since 5.15] void QNetworkAccessManager::setTransferTimeout(int timeout = QNetworkRequest::DefaultTransferTimeoutConstant)
Устанавливает timeout как таймаут передачи в миллисекундах.
Передачи прерываются, если за время таймаута не передано ни одного байта. Ноль означает, что таймер не установлен. Если аргумент не указан, используется значение QNetworkRequest::DefaultTransferTimeoutConstant. Если эта функция не вызывается, таймаут отключён и имеет значение ноль. Конкретные ненулевые таймауты, установленные для запросов, которые выполняются, переопределяют это значение. Это означает, что если в QNetworkAccessManager включён таймаут, его нужно отключить, чтобы выполнить запрос без таймаута.
Данная функция была добавлена в Qt 5.15.
См. также transferTimeout().
[since 5.9] QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
Возвращает список политик HTTP Strict Transport Security. Этот список может отличаться от того, что был первоначально установлен с помощью addStrictTransportSecurityHosts(), если кэш HSTS был обновлён из ответа заголовка "Strict-Transport-Security".
Данная функция была добавлена в Qt 5.9.
См. также addStrictTransportSecurityHosts() и QHstsPolicy.
[virtual, since 5.2] QStringList QNetworkAccessManager::supportedSchemes() const
Выводит список всех схем URL, поддерживаемых менеджером доступа.
Переопределите этот метод в подклассе QNetworkAccessManager, чтобы предоставить свои собственные поддерживаемые схемы. Это, например, необходимо, когда ваш подкласс поддерживает новые протоколы.
Данная функция была добавлена в Qt 5.2.
[since 5.15] int QNetworkAccessManager::transferTimeout() const
Возвращает таймаут, используемый для передач, в миллисекундах.
Этот таймаут равен нулю, если setTransferTimeout() не вызывалась, что означает, что таймаут не используется.
Данная функция была добавлена в Qt 5.15.
См. также setTransferTimeout().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qnetworkaccessmanager.html