Класс QNetworkProxy
Класс QNetworkProxy предоставляет прокси-сервер для сетевого уровня. Подробнее...
| Заголовок: | #include <QNetworkProxy> |
| qmake: | QT += network |
| С момента: | Qt 4.1 |
Примечание: Все функции в этом классе являются взаимоисключающими.
Открытые типы
| Флаги | Возможности |
| Перечисление | Возможность { ВозможностьТуннелирования, ВозможностьПрослушивания, ВозможностьТунелированияUdp, ВозможностьКэширования, ..., ВозможностьПрослушиванияSctp } |
| Перечисление | ТипПрокси { БезПрокси, ПроксиПоУмолчанию, Socks5Прокси, HttpПрокси, HttpКэширующийПрокси, FtpКэширующийПрокси } |
Открытые функции
| QNetworkProxy() | |
| QNetworkProxy(ТипПрокси type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString()) | |
| QNetworkProxy(const QNetworkProxy &other) | |
| ~QNetworkProxy() | |
| Возможности | 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(Возможности capabilities) |
Статические открытые члены
| QNetworkProxy | applicationProxy() |
| void | setApplicationProxy(const QNetworkProxy &networkProxy) |
Подробное описание
Класс QNetworkProxy предоставляет прокси-сервер для сетевого уровня.
QNetworkProxy предоставляет метод для настройки поддержки прокси-сервера сетевого уровня для классов Qt сети. В настоящее время поддерживаются классы 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()
Создаёт QNetworkProxy с типом DefaultProxy; тип прокси определяется applicationProxy(), который по умолчанию имеет тип NoProxy.
См. также setType() и setApplicationProxy().
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(const QNetworkProxy &other)
Создаёт копию other.
QNetworkProxy::~QNetworkProxy()
Удаляет объект QNetworkProxy.
[static] QNetworkProxy QNetworkProxy::applicationProxy()
Возвращает проксирование сети на уровне приложения.
Если у QAbstractSocket или QTcpSocket установлен тип QNetworkProxy::DefaultProxy, то QNetworkProxy, возвращаемый этой функцией, используется.
См. также QNetworkProxyFactory, setApplicationProxy(), QAbstractSocket::proxy() и QTcpServer::proxy().
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(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().
QString QNetworkProxy::user() const
Возвращает имя пользователя, используемое для аутентификации.
См. также setUser(), setPassword() и password().
bool QNetworkProxy::operator!=(const QNetworkProxy &other) const
Сравнивает значение этого сетевого прокси-сервера с other и возвращает true, если они отличаются.
Эта функция была добавлена в Qt 4.4.
QNetworkProxy &QNetworkProxy::operator=(QNetworkProxy &&other)
Оператор перемещающей присваивания.
QNetworkProxy &QNetworkProxy::operator=(const QNetworkProxy &other)
Присваивает значение сетевого прокси-сервера other этому сетевому прокси-серверу.
Эта функция была добавлена в Qt 4.2.
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.9/qnetworkproxy.html