Класс QNetworkProxy
Класс QNetworkProxy предоставляет прокси-сервер сетевого уровня. Подробнее...
| Заголовок: | #include <QNetworkProxy> |
| qmake: | QT += network |
| С версии: | Qt 4.1 |
Этот класс был введен в Qt 4.1.
Примечание: Все функции в этом классе являются взаимоисключающими.
Открытые типы
| flags | Capabilities |
| enum | Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability } |
| enum | ProxyType { NoProxy, DefaultProxy, Socks5Proxy, HttpProxy, HttpCachingProxy, FtpCachingProxy } |
Открытые функции
| 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. В настоящее время поддерживаются классы 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.15/qnetworkproxy.html