Класс QNetworkAccessManager
Класс QNetworkAccessManager позволяет приложению отправлять сетевые запросы и получать ответы. Подробнее...
| Заголовок: | #include <QNetworkAccessManager> |
| qmake: | QT += network |
| С тех пор: | Qt 4.4 |
| Наследует: | QObject |
Этот класс был представлен в Qt 4.4.
Примечание: Все функции в этом классе являются повторно входящими.
Открытые типы
| перечисление | Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation } |
Открытые функции
| QNetworkAccessManager(QObject *parent = nullptr) | |
| виртуальный | ~QNetworkAccessManager() |
| void | addStrictTransportSecurityHosts(const QVector<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) |
| QVector<QHstsPolicy> | strictTransportSecurityHosts() const |
| QStringList | supportedSchemes() const |
| int | transferTimeout() const |
Сигналы
| void | требуетсяАвторизация(QNetworkReply *reply, QAuthenticator *authenticator) |
| void | зашифровано(QNetworkReply *reply) |
| void | завершено(QNetworkReply *reply) |
| void | требуетсяАвторизацияПредварительногоКлюча(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator) |
| void | требуетсяАвторизацияПрокси(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | ошибкиSSL(QNetworkReply *reply, const QList<QSslError> &errors) |
Защищенные функции
| virtual QNetworkReply * | создатьЗапрос(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr) |
Защищенные слоты
| QStringList | поддерживаемыеСхемыРеализация() const |
Подробное описание
API доступа к сети построен вокруг одного объекта QNetworkAccessManager, который содержит общие настройки и параметры для отправляемых запросов. Он содержит настройки прокси и кэша, а также сигналы, связанные с такими проблемами, и сигналы ответа, которые могут использоваться для мониторинга прогресса сетевой операции. Для всего приложения Qt должен быть достаточным один экземпляр QNetworkAccessManager. Так как 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 в соответствующее время. Не удаляйте его напрямую внутри слота, подключенного к завершено(). Используйте функцию 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()) |
Это перечисление было введено или изменено в Qt 4.7.
См. также QNetworkReply::operation().
Документация по функциям-членам
QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)
Создает объект QNetworkAccessManager, который является центром API доступа к сети, и устанавливает parent в качестве родительского объекта.
[signal] void QNetworkAccessManager::требуетсяАвторизация(QNetworkReply *reply, QAuthenticator *authenticator)
Этот сигнал генерируется всякий раз, когда конечный сервер запрашивает аутентификацию перед предоставлением запрашиваемого содержимого. Слоту, подключенному к этому сигналу, необходимо заполнить учетные данные для содержимого (которые можно определить, просмотрев объект reply) в объекте authenticator.
QNetworkAccessManager будет кэшировать учетные данные и отправлять те же значения, если сервер потребует аутентификации снова, не генерируя сигнал authenticationRequired(). Если он отклонит учетные данные, этот сигнал будет сгенерирован снова.
Примечание: Чтобы запрос не отправлял учетные данные, вам не нужно вызывать setUser() или setPassword() в объекте authenticator. Это приведет к тому, что сигнал завершено() будет сгенерирован с QNetworkReply с ошибкой AuthenticationRequiredError.
Примечание: Невозможно использовать QueuedConnection для подключения к этому сигналу, так как подключение завершится неудачно, если authenticator не был заполнен новой информацией к моменту возврата сигнала.
См. также требуетсяАвторизацияПрокси(), QAuthenticator::setUser() и QAuthenticator::setPassword().
[signal] void QNetworkAccessManager::зашифровано(QNetworkReply *reply)
Этот сигнал генерируется, когда сессия SSL/TLS успешно завершила начальное рукопожатие. В этот момент никакие пользовательские данные не были переданы. Сигнал можно использовать для выполнения дополнительных проверок цепочки сертификатов, например, чтобы уведомить пользователей, когда сертификат веб-сайта изменился. Параметр reply указывает, какой сетевой ответ ответственен. Если ответ не соответствует ожидаемым критериям, его следует прервать, вызвав QNetworkReply::abort() в слоте, подключенном к этому сигналу. Настройки SSL, используемые в данный момент, можно просмотреть с помощью метода QNetworkReply::sslConfiguration().
Внутри QNetworkAccessManager могут открываться несколько соединений с сервером, чтобы позволить обрабатывать запросы параллельно. Эти соединения могут быть повторно использованы, что означает, что сигнал encrypted() не будет генерироваться. Это означает, что вы гарантируете получение этого сигнала только для первого подключения к сайту на протяжении всего срока службы QNetworkAccessManager.
Функция была добавлена в Qt 5.1.
См. также QSslSocket::encrypted() и QNetworkReply::encrypted().
[signal] void QNetworkAccessManager::завершено(QNetworkReply *reply)
Этот сигнал генерируется всякий раз, когда завершается ожидающий сетевой ответ. Параметр reply будет содержать указатель на ответ, который только что завершился. Этот сигнал генерируется совместно с сигналом QNetworkReply::finished().
См. QNetworkReply::finished() для получения информации о состоянии объекта.
Примечание: Не удаляйте объект reply в слоте, подключенном к этому сигналу. Используйте deleteLater().
См. также QNetworkReply::finished() и QNetworkReply::error().
[signal] void QNetworkAccessManager::требуетсяАвторизацияПредварительногоКлюча(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().
[protected slot] QStringList QNetworkAccessManager::supportedSchemesImplementation() const
Перечисляет все схемы URL, поддерживаемые менеджером доступа.
Не следует вызывать эту функцию напрямую; используйте QNetworkAccessManager::supportedSchemes() вместо этого.
Переопределите этот слот, чтобы предоставить свои собственные поддерживаемые схемы в подклассе QNetworkAccessManager. Это необходимо, например, когда ваш подкласс поддерживает новые протоколы.
Из-за ограничений двоичной совместимости метод supportedSchemes() (введенный в Qt 5.2) не является виртуальным. Вместо этого supportedSchemes() динамически обнаружит и вызовет этот слот.
Эта функция была добавлена в Qt 5.2.
См. также supportedSchemes().
[virtual] QNetworkAccessManager::~QNetworkAccessManager()
Уничтожает объект QNetworkAccessManager и освобождает все ресурсы. Обратите внимание, что объекты QNetworkReply, возвращаемые этим классом, имеют этот объект в качестве родительского, что означает, что они будут удалены вместе с ним, если вы не вызовете QObject::setParent() для них.
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QVector<QHstsPolicy> &knownHosts)
Добавляет политики HTTP Strict Transport Security в кэш HSTS. knownHosts содержит известные хосты с информацией QHstsPolicy.
Примечание: Истекшая политика удалит известный хост из кэша, если он там ранее присутствовал.
Примечание: При обработке HTTP-ответов QNetworkAccessManager также может обновлять кэш HSTS, удаляя или обновляя существующие политики или вводя новые knownHosts. Таким образом, текущая реализация управляется сервером; код клиента может предоставить QNetworkAccessManager ранее известные или обнаруженные политики, но эта информация может быть перезаписана заголовками ответов «Strict-Transport-Security».
Эта функция была добавлена в Qt 5.9.
См. также addStrictTransportSecurityHosts(), enableStrictTransportSecurityStore() и QHstsPolicy.
bool QNetworkAccessManager::autoDeleteReplies() const
Возвращает true, если QNetworkAccessManager в настоящее время настроен на автоматическое удаление QNetworkReplies, в противном случае — false.
Эта функция была добавлена в Qt 5.14.
См. также setAutoDeleteReplies и QNetworkRequest::AutoDeleteReplyOnFinishAttribute.
QAbstractNetworkCache *QNetworkAccessManager::cache() const
Возвращает кэш, используемый для хранения данных, полученных из сети.
Эта функция была добавлена в Qt 4.5.
См. также setCache().
void QNetworkAccessManager::clearAccessCache()
Очищает внутренний кэш данных аутентификации и сетевых подключений.
Эта функция полезна для автоматических тестов.
Эта функция была добавлена в Qt 5.0.
См. также clearConnectionCache().
void QNetworkAccessManager::clearConnectionCache()
Очищает внутренний кэш сетевых подключений. В отличие от clearAccessCache(), данные аутентификации сохраняются.
Эта функция была добавлена в Qt 5.9.
См. также clearAccessCache().
void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)
Инициализирует соединение с хостом, заданным hostName на порту port. Эта функция полезна для завершения TCP-рукопожатия с хостом до отправки HTTP-запроса, что приводит к снижению сетевой задержки.
Примечание: Эта функция не имеет возможности сообщать об ошибках.
Эта функция была добавлена в Qt 5.2.
См. также connectToHostEncrypted(), get(), post(), put() и deleteResource().
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
Инициализирует соединение с хостом, заданным hostName на порту port, используя sslConfiguration. Эта функция полезна для завершения TCP и SSL-рукопожатия с хостом перед отправкой HTTPS-запроса, что приводит к снижению сетевой задержки.
Примечание: Предварительное подключение соединения SPDY может быть выполнено путем вызова setAllowedNextProtocols() на sslConfiguration со значением QSslConfiguration::NextProtocolSpdy3_0, включенным в список разрешенных протоколов. При использовании SPDY достаточно одного соединения на хост, т. е. вызов этого метода несколько раз для одного хоста не приведет к более быстрым сетевым транзакциям.
Примечание: Эта функция не имеет возможности сообщать об ошибках.
Эта функция была добавлена в Qt 5.2.
См. также connectToHost(), get(), post(), put() и deleteResource().
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
Это перегруженная функция.
Инициализирует соединение с хостом, заданным параметром hostName на порту port, используя sslConfiguration с peerName, установленным в значение hostName для проверки сертификата. Эта функция полезна для завершения рукопожатия TCP и SSL с хостом перед выполнением запроса HTTPS, что приводит к снижению задержки сети.
Примечание: Для предварительного подключения соединения SPDY можно вызвать setAllowedNextProtocols() на sslConfiguration со значением QSslConfiguration::NextProtocolSpdy3_0, включённым в список разрешённых протоколов. При использовании SPDY одного соединения на хост достаточно, то есть вызов этого метода несколько раз для одного хоста не приведёт к ускорению сетевых транзакций.
Примечание: Эта функция не предоставляет возможности для сообщения об ошибках.
Эта функция была добавлена в Qt 5.13.
См. также connectToHost(), get(), post(), put() и deleteResource().
QNetworkCookieJar *QNetworkAccessManager::cookieJar() const
Возвращает QNetworkCookieJar, используемый для хранения полученных из сети куки, а также куки, которые будут отправлены.
См. также 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(), чтобы получить куки, которые будут отправлены удалённому серверу.
Возвращаемый объект должен быть в открытом состоянии.
QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)
Отправляет запрос на удаление ресурса, идентифицированного URL из request.
Примечание: Эта функция в настоящее время доступна только для HTTP, выполняя запрос HTTP DELETE.
Эта функция была добавлена в Qt 4.6.
См. также get(), post(), put() и sendCustomRequest().
void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
Если enabled равно true, внутренший кэш HSTS будет использовать постоянное хранилище для чтения и записи политик HSTS. storeDir определяет, где будет расположено это хранилище. По умолчанию местоположение определяется QStandardPaths::CacheLocation. Если нет возможности записи в QStandartPaths::CacheLocation и storeDir пустая строка, хранилище будет расположено в рабочей директории программы.
Примечание: Если кэш HSTS уже содержит политики HSTS к моменту включения постоянного хранилища, эти политики будут сохранены в хранилище. В случае, если и кэш, и хранилище содержат одни и те же известные хосты, политики из кэша считаются более актуальными (и, следовательно, перезапишут предыдущие значения в хранилище). Если это поведение нежелательно, включите хранилище HSTS до включения Strict Tranport 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).
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
Возвращает true, если HTTP Strict Transport Security (HSTS) был включён. По умолчанию HSTS отключён.
Эта функция была добавлена в Qt 5.9.
См. также setStrictTransportSecurityEnabled().
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.
Эта функция была добавлена в Qt 4.8.
См. также QHttpMultiPart, QHttpPart и put().
QNetworkProxy QNetworkAccessManager::proxy() const
Возвращает QNetworkProxy, который будут использовать запросы, отправленные с помощью этого объекта QNetworkAccessManager. Значение по умолчанию для прокси — QNetworkProxy::DefaultProxy.
См. также setProxy(), setProxyFactory() и proxyAuthenticationRequired().
QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const
Возвращает фабрику прокси, которую использует этот объект QNetworkAccessManager для определения прокси, которые будут использоваться для запросов.
Обратите внимание, что указатель, возвращаемый этой функцией, управляется QNetworkAccessManager и может быть удалён в любой момент.
Эта функция была добавлена в Qt 4.5.
См. также setProxyFactory() и proxy().
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)
Загружает содержимое data по адресу request и возвращает новый объект QNetworkReply, который будет открыт для ответа.
данные должны быть открыты для чтения при вызове этой функции и должны оставаться валидными до тех пор, пока для данного ответа не будет отправлен сигнал 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.
Эта функция была добавлена в Qt 4.8.
См. также QHttpMultiPart, QHttpPart и post().
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).
Эта функция была добавлена в Qt 4.7.
См. также get(), post(), put() и deleteResource().
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
Это перегруженная функция.
Отправляет содержимое массива байтов data в место назначения, указанное в request.
Эта функция была добавлена в Qt 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().
void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)
Включает или отключает автоматическое удаление QNetworkReply.
Установление shouldAutoDelete в true эквивалентно установлению атрибута QNetworkRequest::AutoDeleteReplyOnFinishAttribute в true для всех будущих QNetworkRequest, переданных в этот экземпляр QNetworkAccessManager, если атрибут не был явно установлен на QNetworkRequest.
Эта функция была добавлена в Qt 5.14.
См. также autoDeleteReplies и QNetworkRequest::AutoDeleteReplyOnFinishAttribute.
void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)
Устанавливает кэш сети менеджера в указанный cache. Кэш используется для всех запросов, отправленных менеджером.
Используйте эту функцию, чтобы установить объект кэша сети в класс, реализующий дополнительные функции, например, сохранение файлов cookie в постоянное хранилище.
Примечание: QNetworkAccessManager берет на себя владение объектом cache.
QNetworkAccessManager по умолчанию не имеет установленного кэша. Qt предоставляет простой кэш на диске, QNetworkDiskCache, который можно использовать.
Эта функция была добавлена в Qt 4.5.
См. также cache() и QNetworkRequest::CacheLoadControl.
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
Устанавливает файл cookie менеджера в указанный cookieJar. Файл cookie используется всеми запросами, отправленными менеджером.
Используйте эту функцию, чтобы установить объект файла cookie в класс, реализующий дополнительные функции, например, сохранение файлов cookie в постоянное хранилище.
Примечание: QNetworkAccessManager берет на себя владение объектом cookieJar.
Если cookieJar находится в том же потоке, что и этот QNetworkAccessManager, он установит родительский элемент для cookieJar, чтобы файл cookie был удален при удалении этого объекта. Если вы хотите использовать файлы cookie между различными объектами QNetworkAccessManager, вы можете установить родительский элемент файла cookie в 0 после вызова этой функции.
QNetworkAccessManager по умолчанию не реализует собственную политику cookie: он принимает все cookie, отправленные сервером, если они имеют правильный формат и соответствуют минимальным требованиям безопасности (домен cookie соответствует запросу и путь cookie соответствует запросу). Для реализации собственной политики безопасности переопределите виртуальные функции QNetworkCookieJar::cookiesForUrl() и QNetworkCookieJar::setCookiesFromUrl(). Эти функции вызываются QNetworkAccessManager при обнаружении нового cookie.
См. также 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(), фабрика не будет использоваться.
Эта функция была добавлена в Qt 4.5.
См. также proxyFactory(), setProxy() и QNetworkProxyQuery.
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
Устанавливает политику перенаправления менеджера на указанную policy. Эта политика повлияет на все последующие запросы, созданные менеджером.
Используйте эту функцию для включения или выключения HTTP-перенаправлений на уровне менеджера.
Примечание: При создании запроса QNetworkRequest::RedirectAttributePolicy имеет наивысший приоритет, затем QNetworkRequest::FollowRedirectsAttribute. Наконец, политика менеджера имеет наименьший приоритет.
Для обратной совместимости значение по умолчанию — QNetworkRequest::ManualRedirectPolicy. В будущем это может измениться, и какая-то политика автоматического перенаправления станет значением по умолчанию; клиентам, зависящим от обработки ручного перенаправления, рекомендуется явно устанавливать эту политику в своём коде.
Эта функция была добавлена в Qt 5.9.
См. также redirectPolicy(), QNetworkRequest::RedirectPolicy и QNetworkRequest::FollowRedirectsAttribute.
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().
void QNetworkAccessManager::setTransferTimeout(int timeout = QNetworkRequest::DefaultTransferTimeoutConstant)
Устанавливает timeout как таймаут передачи в миллисекундах.
Передачи прерываются, если до истечения таймаута не передано ни одного байта. Ноль означает, что таймер не установлен. Если аргумент не предоставлен, таймаут равен QNetworkRequest::DefaultTransferTimeoutConstant. Если эта функция не вызывается, таймаут отключён и имеет значение ноль. Установленные для выполняемых запросов специфические таймауты, отличные от нуля, переопределяют это значение. Это означает, что если у QNetworkAccessManager включён таймаут, его нужно отключить для выполнения запроса без таймаута.
Эта функция была добавлена в Qt 5.15.
См. также transferTimeout().
QVector<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
Возвращает список политик HTTP Strict Transport Security. Этот список может отличаться от первоначально установленного через addStrictTransportSecurityHosts(), если кэш HSTS был обновлён из заголовка ответа «Strict-Transport-Security».
Эта функция была добавлена в Qt 5.9.
См. также addStrictTransportSecurityHosts() и QHstsPolicy.
QStringList QNetworkAccessManager::supportedSchemes() const
Перечисляет все схемы URL, поддерживаемые менеджером доступа.
Эта функция была добавлена в Qt 5.2.
См. также supportedSchemesImplementation().
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-5.15/qnetworkaccessmanager.html