QNetworkProxyFactory 类

QNetworkProxyFactory 类提供细粒度代理选择。 更多...

头: #include <QNetworkProxyFactory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

公共函数

QNetworkProxyFactory ()
virtual ~QNetworkProxyFactory ()
virtual QList<QNetworkProxy> queryProxy (const QNetworkProxyQuery & query = QNetworkProxyQuery()) = 0

静态公共成员

QList<QNetworkProxy> proxyForQuery (const QNetworkProxyQuery & query )
void setApplicationProxyFactory (QNetworkProxyFactory * factory )
void setUseSystemConfiguration (bool enable )
QList<QNetworkProxy> systemProxyForQuery (const QNetworkProxyQuery & query = QNetworkProxyQuery())
bool usesSystemConfiguration ()

详细描述

QNetworkProxyFactory 是扩展为 QNetworkProxy ,允许应用程序对使用哪种代理服务器有更细粒度控制 (从属套接字请求代理)。例如,这允许应用程序根据协议或目标主机名应用不同设置。

可以为应用程序全局设置 QNetworkProxyFactory,在这种情况下,将覆盖任何全局代理设置采用 QNetworkProxy::setApplicationProxy ()。若全局设置,则任何采用 Qt 创建的套接字都将查询工厂以确定要使用的代理。

也可以在支持多个连接的某些框架中设置工厂,譬如 QNetworkAccessManager 。当在这种对象上设置时,将只查询由该框架创建的套接字的工厂。

系统代理

可以把工厂配置为使用系统代理的设置。调用 setUseSystemConfiguration () 函数采用 true 以启用此行为,或 false 以禁用此行为。

同样,可以使用工厂以直接查询系统代理通过调用其 systemProxyForQuery () 函数。

警告: 从属用户系统配置,在某些平台使用的系统代理特征可能会受到限制。 systemProxyForQuery () 文档编制包含那些受影响平台的局限性列表。

成员函数文档编制

QNetworkProxyFactory:: QNetworkProxyFactory ()

创建 QNetworkProxyFactory 对象。

由于 QNetworkProxyFactory 是抽象类,因此无法直接创建 QNetworkProxyFactory 类型的对象。

[虚拟] QNetworkProxyFactory:: ~QNetworkProxyFactory ()

销毁 QNetworkProxyFactory 对象。

[static] QList < QNetworkProxy > QNetworkProxyFactory:: proxyForQuery (const QNetworkProxyQuery & query )

此函数接受查询请求 query ,审查套接字或请求类型的细节,并返回列表为 QNetworkProxy 对象 (按首选次序指示要使用的代理服务器)。

[pure virtual] QList < QNetworkProxy > QNetworkProxyFactory:: queryProxy (const QNetworkProxyQuery & query = QNetworkProxyQuery())

此函数接受查询请求 query ,审查套接字或请求类型的细节,并返回列表为 QNetworkProxy 对象 (按首选次序指示要使用的代理服务器)。

当重实现此类时,小心至少要返回一元素。

若无法确定更好的代理替代,使用 QNetworkProxy::DefaultProxy ,它告诉代码查询代理以使用更高替代。例如,若把此工厂设置给 QNetworkAccessManager 对象,DefaultProxy 将告诉它以查询应用程序级代理设置。

若此工厂被设置为应用程序代理工厂,DefaultProxy 和 Noproxy 将拥有相同含义。

[static] void QNetworkProxyFactory:: setApplicationProxyFactory ( QNetworkProxyFactory * factory )

把应用程序范围代理工厂设为 factory 。此函数将拥有该对象的所有权,且会删除它当有必要时。

应用程序范围代理被用作最后手段,当所有其它代理选择请求返回 QNetworkProxy::DefaultProxy 。例如, QTcpSocket objects can have a proxy set with QTcpSocket::setProxy, but if none is set, the proxy factory class set with this function will be queried.

若采用此函数设置代理工厂,则任何应用程序级代理设置采用 QNetworkProxy::setApplicationProxy 将被覆写,且 usesSystemConfiguration () 会返回 false .

另请参阅 QNetworkProxy::setApplicationProxy (), QAbstractSocket::proxy (),和 QAbstractSocket::setProxy ().

[static] void QNetworkProxyFactory:: setUseSystemConfiguration ( bool enable )

启用特定平台代理设置的使用,且只使用那些。见 systemProxyForQuery () 了解更多信息。

调用此函数采用 enable 设为 true 重置任何代理或 QNetworkProxyFactory 已经设置。

注意: systemProxyForQuery () 文档编制,了解使用系统代理的相关局限性列表。

[static] QList < QNetworkProxy > QNetworkProxyFactory:: systemProxyForQuery (const QNetworkProxyQuery & query = QNetworkProxyQuery())

此函数接受查询请求 query ,审查套接字或请求类型的细节,并返回列表为 QNetworkProxy 对象 (按首选次序指示要使用的代理服务器)。

此函数可用于确定特定于平台的代理设置。此函数将使用由操作系统提供的库来确定给定连接的代理,若存在这种库。若不存在,此函数将仅仅返回 QNetworkProxy 类型 QNetworkProxy::NoProxy .

在 Windows,此函数将使用 WinHTTP DLL 功能。不管它的名称,Microsoft 建议所有要求网络连接的应用程序都使用它,而不仅仅是 HTTP。这会考虑采用 proxycfg.exe 工具在注册表中设置的代理设置。若找不到这些设置,此函数将尝试获得 Internet Explorer 设置并使用它们。

在 macOS,此函数将使用 SystemConfiguration 框架从 Apple 获得代理设置。它将分别为包含 ftp、http 和 https 协议标签的查询应用 FTP、HTTP 和 HTTPS 代理配置。若在该配置中启用 SOCKS 代理,此函数将为所有查询使用 SOCKS 服务器。若 SOCKS 未启用,它将为所有 TcpSocket 和 UrlRequest 查询使用 HTTPS 代理。

On systems configured with libproxy support, this function will rely on libproxy to obtain the proxy settings. Depending on libproxy configurations, this can in turn delegate to desktop settings, environment variables, etc.

在其它系统,此函数将从 http_proxy 环境变量中拾取代理设置。该变量必须是使用以下方案之一的 URL:http、socks5 或 socks5h。

局限性

这些是此函数当前版本的局限性。未来版本的 Qt 可能消除这里列出的某些局限性。

  • 在 macOS,此函数会忽略 Proxy Auto Configuration (代理自动配置) 设置,因为它不能执行关联 ECMAcript 代码。
  • 在 Windows 平台,此函数可能需要几秒钟来执行 (取决于用户的系统配置)。

[static] bool QNetworkProxyFactory:: usesSystemConfiguration ()

返回是否已启用特定平台代理设置的使用。