Spec-Zone.ru › Qt

Класс QNetworkProxy

Класс QNetworkProxy предоставляет прокси-сервер для сетевого уровня. Подробнее...

Заголовок: #include <QNetworkProxy>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются многопоточными.

Публичные типы

флаги Возможности
перечисление Возможность { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability }
перечисление ТипПрокси { 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-соединения от удалённого хоста.

Тип Capabilities — это typedef для 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().

void QNetworkProxy::setPort(quint16 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_MARKER

QString 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.2/qnetworkproxy.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API