Класс QNetworkProxy
Класс QNetworkProxy предоставляет прокси-сервер для сетевого уровня. Подробнее...
| Заголовок: | #include <QNetworkProxy> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
Примечание: Все функции в этом классе являются перевходными.
Типы публичного доступа
| флаги | Возможности |
| перечисление | Возможность { СпособностьТуннелирования, СпособностьПрослушивания, СпособностьТуннелированияUdp, СпособностьКэширования, СпособностьПоискаИмениХоста, …, СпособностьПрослушиванияSctp } |
| перечисление | ТипПрокси { БезПрокси, ПроксиПоУмолчанию, ПроксиSocks5, ПроксиHttp, ПроксиHttpКэширования, ПроксиFtpКэширования } |
Функции публичного доступа
| QNetworkProxy(const QNetworkProxy &other) | |
| QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString()) | |
| QNetworkProxy() | |
| QNetworkProxy & | operator=(const QNetworkProxy &other) |
| ~QNetworkProxy() | |
| QNetworkProxy::Capabilities | capabilities() const |
| bool | hasRawHeader(const QByteArray &headerName) const |
| QVariant | header(QNetworkRequest::KnownHeaders header) const |
| QString | hostName() const |
| bool | isCachingProxy() const |
| bool | isTransparentProxy() const |
| QString | password() const |
| quint16 | port() const |
| QByteArray | rawHeader(const QByteArray &headerName) const |
| QList<QByteArray> | rawHeaderList() const |
| void | setCapabilities(QNetworkProxy::Capabilities capabilities) |
| void | setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value) |
| void | setHostName(const QString &hostName) |
| void | setPassword(const QString &password) |
| void | setPort(quint16 port) |
| void | setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) |
| void | setType(QNetworkProxy::ProxyType type) |
| void | setUser(const QString &user) |
| void | swap(QNetworkProxy &other) |
| QNetworkProxy::ProxyType | type() const |
| QString | user() const |
| bool | operator!=(const QNetworkProxy &other) const |
| bool | operator==(const QNetworkProxy &other) const |
Статические члены публичного доступа
| QNetworkProxy | applicationProxy() |
| void | setApplicationProxy(const QNetworkProxy &networkProxy) |
Подробное описание
QNetworkProxy предоставляет методы для настройки поддержки прокси-сервера сетевого уровня для классов Qt network. В настоящее время поддерживаются классы QAbstractSocket, QTcpSocket, QUdpSocket, QTcpServer и QNetworkAccessManager. Поддержка прокси-сервера разработана для максимальной прозрачности. Это означает, что существующие сетевые приложения, которые вы написали, автоматически будут поддерживать прокси-сервер, используя следующий код.
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy); Альтернативой настройке прокси на уровне приложения является указание прокси для отдельных сокетов с помощью QAbstractSocket::setProxy() и QTcpServer::setProxy(). Таким образом, можно отключить использование прокси для определенных сокетов, используя следующий код:
serverSocket->setProxy(QNetworkProxy::NoProxy);
Прокси сети не используется, если адрес, используемый в connectToHost(), bind() или listen(), эквивалентен QHostAddress::LocalHost или QHostAddress::LocalHostIPv6.
Каждый тип поддержки прокси имеет определенные ограничения. Перед выбором типа прокси необходимо внимательно ознакомиться с документацией ProxyType.
Примечание: Изменения, внесенные в текущие подключенные сокеты, не вступают в силу. Если необходимо изменить подключенный сокет, его следует переподключить.
SOCKS5
Поддержка SOCKS5 с Qt 4 основана на RFC 1928 и RFC 1929. Поддерживаются методы аутентификации без аутентификации и с использованием имени пользователя/пароля. Поддерживаются как IPv4, так и IPv6. Имена доменов разрешаются через сервер SOCKS5, если включена опция QNetworkProxy::HostNameLookupCapability, в противном случае они разрешаются локально, и IP-адрес отправляется на сервер. При использовании SOCKS5 с QUdpSocket и QTcpServer следует учесть несколько моментов:
При использовании QUdpSocket, вызов bind() может завершиться ошибкой таймаута. Если в bind() передается номер порта, отличный от 0, нет гарантии, что будет использован указанный порт. Используйте localPort() и localAddress() для получения фактического адреса и номера порта, используемых в данный момент. Поскольку проксированный UDP проходит через два UDP-соединения, вероятность потери пакетов выше.
При использовании QTcpServer, вызов listen() может завершиться ошибкой таймаута. Если в listen() передается номер порта, отличный от 0, нет гарантии, что будет использован указанный порт. Используйте serverPort() и serverAddress() для получения фактического адреса и порта, используемого для прослушивания подключений. SOCKS5 поддерживает только одно принятое соединение на вызов listen(), и каждый вызов, вероятно, приведет к использованию другого значения serverPort().
См. также QAbstractSocket и QTcpServer.
Документация типов членов
enum QNetworkProxy::Capabilityflags QNetworkProxy::Capabilities
Эти флаги указывают на возможности, поддерживаемые данным прокси-сервером.
QNetworkProxy устанавливает различные возможности по умолчанию при создании объекта (см. QNetworkProxy::ProxyType для списка значений по умолчанию). Однако, возможно изменить возможности после создания объекта с помощью setCapabilities().
Поддерживаемые QNetworkProxy возможности:
| Постоянная | Значение | Описание |
|---|---|---|
QNetworkProxy::TunnelingCapability |
0x0001 |
Возможность открытия прозрачных, туннелированных TCP-соединений с удалённым хостом. Прокси-сервер пересылает передачу дословно с одной стороны на другую и не выполняет кэширование. |
QNetworkProxy::ListeningCapability |
0x0002 |
Возможность создания прослушивающего сокета и ожидания входящего TCP-соединения от удалённого хоста. |
QNetworkProxy::UdpTunnelingCapability |
0x0004 |
Возможность пересылки UDP-даттаграмм через прокси-сервер к удалённому хосту и от него. |
QNetworkProxy::CachingCapability |
0x0008 |
Возможность кэширования содержимого передачи. Эта возможность специфична для каждого протокола и типа прокси. Например, HTTP-прокси могут кэшировать содержимое веб-данных, передаваемых с помощью команд "GET". |
QNetworkProxy::HostNameLookupCapability |
0x0010 |
Возможность подключения для выполнения поиска по имени удалённого хоста и подключения к нему, вместо того, чтобы требовать от приложения выполнения поиска имени и запроса подключения только к IP-адресам. |
QNetworkProxy::SctpTunnelingCapability |
0x00020 |
Возможность открытия прозрачных, туннелированных SCTP-соединений с удалённым хостом. |
QNetworkProxy::SctpListeningCapability |
0x00040 |
Возможность создания прослушивающего сокета и ожидания входящего SCTP-соединения от удалённого хоста. |
Тип Capabilities — псевдоним для QFlags<Capability>. Он хранит результат побитового ИЛИ комбинации значений Capability.
enum QNetworkProxy::ProxyType
Этот перечисление описывает типы сетевого проксирования, предоставляемые в Qt.
Существует два типа прокси, которые понимает Qt: прозрачные прокси и прокси с кэшированием. Первая группа состоит из прокси, которые могут обрабатывать любые произвольные передачи данных, а вторая — только определённые запросы. Кэширующие прокси имеют смысл только для конкретных классов, где они могут быть использованы.
| Постоянная | Значение | Описание |
|---|---|---|
QNetworkProxy::NoProxy |
2 |
Проксирование не используется |
QNetworkProxy::DefaultProxy |
0 |
Прокси определяется на основе прокси приложения, установленного с помощью setApplicationProxy() |
QNetworkProxy::Socks5Proxy |
1 |
Используется проксирование Socks5 |
QNetworkProxy::HttpProxy |
3 |
Используется прозрачное проксирование HTTP |
QNetworkProxy::HttpCachingProxy |
4 |
Проксирование только для HTTP-запросов |
QNetworkProxy::FtpCachingProxy |
5 |
Проксирование только для FTP-запросов |
В таблице ниже перечислены различные типы прокси и их возможности. Поскольку каждый тип прокси имеет разные возможности, важно понять их перед выбором типа прокси.
| Тип прокси | Описание | Значения по умолчанию |
|---|---|---|
| SOCKS 5 | Общий прокси для любого типа соединения. Поддерживает TCP, UDP, привязку к порту (входящие соединения) и аутентификацию. | TunnelingCapability, ListeningCapability, UdpTunnelingCapability, HostNameLookupCapability |
| HTTP | Реализован с помощью команды "CONNECT", поддерживает только исходящие TCP-соединения; поддерживает аутентификацию. | TunnelingCapability, CachingCapability, HostNameLookupCapability |
| Только кэширующий HTTP | Реализован с использованием обычных HTTP-команд, полезен только в контексте HTTP-запросов (см. QNetworkAccessManager) | CachingCapability, HostNameLookupCapability |
| Кэширующий FTP | Реализован с использованием FTP-прокси, полезен только в контексте FTP-запросов (см. QNetworkAccessManager) | CachingCapability, HostNameLookupCapability |
Также обратите внимание, что не следует устанавливать прокси по умолчанию для приложения (setApplicationProxy()) на прокси, не имеющий возможности TunnelingCapability. В противном случае QTcpSocket не будет знать, как открывать соединения.
См. также setType(), type(), capabilities() и setCapabilities().
Документация по функциям-членам
QNetworkProxy::QNetworkProxy(const QNetworkProxy &other)
Создаёт копию other.
QNetworkProxy::QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString())
Создаёт QNetworkProxy с указанными параметрами type, hostName, port, user и password.
По умолчанию устанавливаются возможности для типа прокси type.
См. также capabilities().
QNetworkProxy::QNetworkProxy()
Создаёт QNetworkProxy с типом DefaultProxy.
Тип прокси определяется по applicationProxy(), по умолчанию NoProxy или системному прокси, если он настроен.
См. также setType() и setApplicationProxy().
QNetworkProxy &QNetworkProxy::operator=(const QNetworkProxy &other)
Присваивает значение сетевого прокси other данному сетевому прокси.
QNetworkProxy::~QNetworkProxy()
Уничтожает объект QNetworkProxy.
[static] QNetworkProxy QNetworkProxy::applicationProxy()
Возвращает сетевое проксирование на уровне приложения.
Если у QAbstractSocket или QTcpSocket тип QNetworkProxy::DefaultProxy, то QNetworkProxy, возвращаемый этой функцией, используется.
См. также QNetworkProxyFactory, setApplicationProxy(), QAbstractSocket::proxy() и QTcpServer::proxy().
QNetworkProxy::Capabilities QNetworkProxy::capabilities() const
Возвращает возможности этого прокси-сервера.
См. также setCapabilities() и type().
[since 5.0] bool QNetworkProxy::hasRawHeader(const QByteArray &headerName) const
Возвращает true если сырой заголовок headerName используется для данного прокси. Возвращает false если прокси не является типа HttpProxy или HttpCachingProxy.
Эта функция была введена в Qt 5.0.
См. также rawHeader() и setRawHeader().
[since 5.0] QVariant QNetworkProxy::header(QNetworkRequest::KnownHeaders header) const
Возвращает значение известного сетевого заголовка header, если он используется для данного прокси. Если он отсутствует, возвращает QVariant() (т.е. недействительный вариант).
Эта функция была введена в Qt 5.0.
См. также QNetworkRequest::KnownHeaders, rawHeader() и setHeader().
QString QNetworkProxy::hostName() const
Возвращает имя хоста прокси-сервера.
См. также setHostName(), setPort() и port().
bool QNetworkProxy::isCachingProxy() const
Возвращает true, если этот прокси поддерживает возможность кэширования QNetworkProxy::CachingCapability.
В Qt 4.4 эта возможность была связана с типом прокси, но начиная с Qt 4.5 можно отключить кэширование у прокси, вызвав setCapabilities().
См. также capabilities(), type() и isTransparentProxy().
bool QNetworkProxy::isTransparentProxy() const
Возвращает true, если этот прокси поддерживает прозрачное туннелирование TCP-соединений. Это соответствует возможности QNetworkProxy::TunnelingCapability.
В Qt 4.4 эта возможность была связана с типом прокси, но начиная с Qt 4.5 можно отключить кэширование у прокси, вызвав setCapabilities().
См. также capabilities(), type() и isCachingProxy().
QString QNetworkProxy::password() const
Возвращает пароль, используемый для аутентификации.
См. также user(), setPassword() и setUser().
quint16 QNetworkProxy::port() const
Возвращает порт хоста прокси-сервера.
См. также setHostName(), setPort() и hostName().
[since 5.0] QByteArray QNetworkProxy::rawHeader(const QByteArray &headerName) const
Возвращает исходную форму заголовка headerName. Если такого заголовка нет или прокси не является типом HttpProxy или HttpCachingProxy, возвращается пустой QByteArray, который может быть неотличим от заголовка, присутствующего, но не имеющего содержимого (используйте hasRawHeader(), чтобы узнать, существует ли заголовок).
Необработанные заголовки можно задать с помощью setRawHeader() или setHeader().
Эта функция была добавлена в Qt 5.0.
См. также header() и setRawHeader().
[since 5.0] QList<QByteArray> QNetworkProxy::rawHeaderList() const
Возвращает список всех исходных заголовков, установленных в этом сетевом прокси. Список упорядочен по порядку установки заголовков.
Если прокси не является типом HttpProxy или HttpCachingProxy, возвращается пустой QList.
Эта функция была добавлена в Qt 5.0.
См. также hasRawHeader() и rawHeader().
[static] void QNetworkProxy::setApplicationProxy(const QNetworkProxy &networkProxy)
Устанавливает проксирование на уровне приложения в networkProxy.
Если у QAbstractSocket или QTcpSocket установлен тип QNetworkProxy::DefaultProxy, тогда используется QNetworkProxy, установленный этой функцией. Если вам нужна большая гибкость в определении используемого прокси, используйте класс QNetworkProxyFactory.
Установка значения прокси по умолчанию с помощью этой функции переопределит фабрику прокси приложения, установленную с помощью QNetworkProxyFactory::setApplicationProxyFactory, и отключит использование системного прокси.
См. также QNetworkProxyFactory, applicationProxy(), QAbstractSocket::setProxy() и QTcpServer::setProxy().
void QNetworkProxy::setCapabilities(QNetworkProxy::Capabilities capabilities)
Устанавливает возможности этого прокси в capabilities.
См. также setType() и capabilities().
[since 5.0] void QNetworkProxy::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
Устанавливает значение известного заголовка header в value, перезаписывая ранее установленные заголовки. Эта операция также устанавливает эквивалентный исходный HTTP-заголовок.
Если прокси не является типом HttpProxy или HttpCachingProxy, это не повлияет.
Эта функция была добавлена в Qt 5.0.
См. также QNetworkRequest::KnownHeaders, setRawHeader() и header().
void QNetworkProxy::setHostName(const QString &hostName)
Устанавливает имя хоста прокси-сервера в hostName.
См. также hostName(), setPort() и port().
void QNetworkProxy::setPassword(const QString &password)
Устанавливает пароль для аутентификации прокси в password.
См. также user(), setUser() и password().
quint16 QNetworkProxy::setPort(port)
Устанавливает порт хоста прокси-сервера в port.
См. также hostName(), setHostName() и port().
[since 5.0] void QNetworkProxy::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
Устанавливает заголовок headerName со значением headerValue. Если headerName соответствует известному заголовку (см. QNetworkRequest::KnownHeaders), необработанный формат будет разобран, и соответствующий "обработанный" заголовок также будет установлен.
Например:
request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT")); также установит известный заголовок LastModifiedHeader в объект QDateTime разобранной даты.
Примечание: Установка одного и того же заголовка дважды переопределяет предыдущее значение. Для достижения поведения нескольких HTTP-заголовков с одинаковым именем необходимо объединить два значения, разделив их запятой (",") и установить один необработанный заголовок.
Если прокси не является типом HttpProxy или HttpCachingProxy, это не повлияет.
Эта функция была добавлена в Qt 5.0.
См. также QNetworkRequest::KnownHeaders, setHeader(), hasRawHeader() и rawHeader().
void QNetworkProxy::setType(QNetworkProxy::ProxyType type)
Устанавливает тип прокси для этого экземпляра в type.
Обратите внимание, что изменение типа прокси не изменяет набор возможностей, который этот объект QNetworkProxy хранит, если какие-либо возможности были заданы с помощью setCapabilities().
См. также type() и setCapabilities().
void QNetworkProxy::setUser(const QString &user)
Устанавливает имя пользователя для аутентификации прокси в user.
См. также user(), setPassword() и password().
[since 5.0] void QNetworkProxy::swap(QNetworkProxy &other)
Меняет местами этот экземпляр сетевого прокси с other. Эта функция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 5.0.
QNetworkProxy::ProxyType QNetworkProxy::type() const
Возвращает тип прокси для этого экземпляра.
См. также setType().
END_OF_DOCUMENT_MARKERQString QNetworkProxy::user() const
Возвращает имя пользователя, используемое для аутентификации.
См. также setUser(), setPassword() и password().
bool QNetworkProxy::operator!=(const QNetworkProxy &other) const
Сравнивает значение этого сетевого прокси-сервера с other и возвращает true, если они отличаются.
bool QNetworkProxy::operator==(const QNetworkProxy &other) const
Сравнивает значение этого сетевого прокси-сервера с other и возвращает true, если они равны (одинаковый тип прокси, сервер, а также имя пользователя и пароль).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qnetworkproxy.html