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 类型的对象。
[virtual]
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 可能消除这里列出的某些局限性。
[static, since 5.8]
bool
QNetworkProxyFactory::
usesSystemConfiguration
()
返回是否已启用特定平台代理设置的使用。
该函数在 Qt 5.8 引入。