QNetworkProxyFactory 类

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

头: #include <QNetworkProxyFactory>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED)
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 代理。

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

局限性

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

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

[static, since 5.8] bool QNetworkProxyFactory:: usesSystemConfiguration ()

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

该函数在 Qt 5.8 引入。