QNetworkProxyFactory 类

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

头文件 #include <QNetworkProxyFactory>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network

公共函数

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

静态公共成员

QList<QNetworkProxy>proxyForQuery(const QNetworkProxyQuery &query)
voidsetApplicationProxyFactory(QNetworkProxyFactory *factory)
voidsetUseSystemConfiguration(bool enable)
QList<QNetworkProxy>systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery())
boolusesSystemConfiguration()

详细说明

QNetworkProxyFactory 是 QNetworkProxy 的扩展,允许应用程序根据请求代理的套接字更细粒度地控制使用的代理服务器。这使得应用程序可以根据协议或目标主机名等信息应用不同的设置。

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

工厂还可以设置在支持多个连接的某些框架中,如 QNetworkAccessManager。在该对象上设置时,工厂将为该框架创建的套接字查询。

系统代理

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

类似地,您可以通过调用其 systemProxyForQuery() 函数直接查询系统代理。

警告:根据用户系统的配置,某些平台上使用系统代理功能可能受到限制。有关受影响的平台的这些限制的列表,请参阅 systemProxyForQuery() 的文档。

成员函数文档

QNetworkProxyFactory::QNetworkProxyFactory()

创建一个 QNetworkProxyFactory 对象。

由于 QNetworkProxyFactory 是一个抽象类,因此不能直接创建 QNetworkProxyFactory 类型的对象。

[virtual noexcept] 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 对象可以使用 QTcpSocket::setProxy 设置代理,但如果没有设置,将通过此函数设置的代理工厂类进行查询。

如果您使用此函数设置代理工厂,将覆盖使用 QNetworkProxy::setApplicationProxy 设置的应用程序级代理,并且 usesSystemConfiguration() 将返回 false

另请参阅QNetworkProxy::setApplicationProxyQAbstractSocket::proxyQAbstractSocket::setProxy

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

启用使用特定平台代理设置的功能,仅限这些设置。有关更多信息,请参阅 systemProxyForQuery

使用 enable 设置为 true 调用此函数将重置任何已设置的代理或 QNetworkProxyFactory

注意:有关系统代理使用的限制列表,请参阅systemProxyForQuery() 文档。

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

该函数接收查询请求 query,检查套接字或请求的类型细节,并按优先级返回指示要使用的代理服务器的 QNetworkProxy 对象列表。

此函数可用于确定特定平台的代理设置。如果存在的库,此函数将使用操作系统提供的库确定指定连接的代理。如果没有这些库,此函数将只返回类型为QNetworkProxy::NoProxyQNetworkProxy

在 Windows 上,此函数将使用 WinHTTP DLL 函数。尽管其名称为 WinHTTP,但 Microsoft 建议所有需要网络连接的应用程序都使用它,而不仅仅是 HTTP。这将尊重使用 proxycfg.exe 工具设置的注册表中的代理设置。如果找不到这些设置,则此函数将尝试获取 Internet Explorer 的设置并使用它们。

在 macOS 上,此函数将使用苹果的 CFNetwork 框架获取代理设置。对于包含协议标签 "ftp"、"http" 和 "https" 的查询,它将应用 FTP、HTTP 和 HTTPS 代理配置。如果在该配置中启用了 SOCKS 代理,则此函数将使用 SOCKS 服务器对所有查询进行操作。如果没有启用 SOCKS,它将使用 HTTPS 代理对所有 TcpSocket 和 UrlRequest 查询进行操作。

在配置了 libproxy 支持的系统中,此函数将依赖于 libproxy 获取代理设置。根据 libproxy 配置,这可以进一步委托到桌面设置、环境变量等。

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

限制

以下是此函数当前版本的限制。Qt 的未来版本可能会取消其中一些限制。

  • 在 Windows 平台上,此函数可能需要几秒钟的时间来执行,具体取决于用户系统的配置。

[静态] bool QNetworkProxyFactory::usesSystemConfiguration()

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

© 2024 The Qt Company Ltd. 本文档中包含的贡献有各自所有者的版权。在此提供的文档是根据 Free Software Foundation 发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应标志是芬兰和/或全球其他国家的 The Qt Company Ltd 的商标。所有其他商标均为其各自所有者的财产。