Класс QNetworkProxy
Класс QNetworkProxy предоставляет прокси-сервер для сетевого уровня. Подробнее...
| Заголовок: | #include <QNetworkProxy> |
| qmake: | QT += network |
| С тех пор: | Qt 4.1 |
Этот класс был представлен в Qt 4.1.
Примечание: Все функции в этом классе являются перевходными.
Типы
| флаги | Возможности |
| перечисление | Возможность { СпособностьТунелирования, СпособностьПрослушивания, СпособностьТунелирования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-соединения от удалённого хоста. |
Этот перечисление был введён или изменён в Qt 4.5.
Тип 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 данному сетевому прокси.
Эта функция была введена в Qt 4.2.
QNetworkProxy::~QNetworkProxy()
Удаляет объект QNetworkProxy.
[static] QNetworkProxy QNetworkProxy::applicationProxy()
Возвращает сетевое проксирование на уровне приложения.
Если у QAbstractSocket или QTcpSocket тип QNetworkProxy::DefaultProxy, то QNetworkProxy, возвращаемый этой функцией, используется.
См. также QNetworkProxyFactory, setApplicationProxy(), QAbstractSocket::proxy(), и QTcpServer::proxy().
QNetworkProxy::Capabilities QNetworkProxy::capabilities() const
Возвращает возможности этого прокси-сервера.
Эта функция была введена в Qt 4.5.
См. также setCapabilities() и type().
bool QNetworkProxy::hasRawHeader(const QByteArray &headerName) const
Возвращает true , если необработанный заголовок headerName используется для этого прокси. Возвращает false , если прокси не является типа HttpProxy или HttpCachingProxy.
Эта функция была введена в Qt 5.0.
См. также rawHeader() и setRawHeader().
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().
Данная функция была добавлена в Qt 4.4.
См. также capabilities(), type(), и isTransparentProxy().
bool QNetworkProxy::isTransparentProxy() const
Возвращает true если данный прокси поддерживает прозрачный туннелирование TCP-соединений. Это соответствует возможности QNetworkProxy::TunnelingCapability.
В Qt 4.4 эта возможность была связана с типом прокси, но начиная с Qt 4.5 стало возможным отключить кэширование для прокси, вызвав setCapabilities().
Данная функция была добавлена в Qt 4.4.
См. также capabilities(), type(), и isCachingProxy().
QString QNetworkProxy::password() const
Возвращает пароль, используемый для аутентификации.
См. также user(), setPassword(), и setUser().
quint16 QNetworkProxy::port() const
Возвращает порт хоста прокси-сервера.
См. также setHostName(), setPort(), и hostName().
QByteArray QNetworkProxy::rawHeader(const QByteArray &headerName) const
Возвращает необработанный формат заголовка headerName. Если такого заголовка нет или прокси не является типа HttpProxy или HttpCachingProxy, возвращается пустой QByteArray. Это может быть неотличимо от заголовка, присутствующего, но не содержащего данных (используйте hasRawHeader(), чтобы узнать, существует ли заголовок).
Необработанные заголовки можно установить с помощью setRawHeader() или setHeader().
Данная функция была добавлена в Qt 5.0.
См. также header() и setRawHeader().
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.
Данная функция была добавлена в Qt 4.5.
См. также setType() и capabilities().
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().
void QNetworkProxy::setPort(quint16 port)
Устанавливает порт хоста прокси-сервера в port.
См. также hostName(), setHostName(), и port().
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().
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, если они отличаются.
Эта функция была добавлена в Qt 4.4.
bool QNetworkProxy::operator==(const QNetworkProxy &other) const
Сравнивает значение этого сетевого прокси с other и возвращает true, если они равны (одинаковый тип прокси, сервер, а также имя пользователя и пароль).
Эта функция была добавлена в Qt 4.4.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qnetworkproxy.html