QNetworkProxy 类

QNetworkProxy 类提供网络层代理。 更多...

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

注意: 此类的所有函数 可重入 .

公共类型

flags Capabilities
enum Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability }
enum ProxyType { 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 Network 类配置网络层代理支持的方法。目前,支持的类是 QAbstractSocket , QTcpSocket , QUdpSocket , QTcpServer and 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() or listen() 相当于 QHostAddress::LocalHost or QHostAddress::LocalHostIPv6 .

代理支持的各种类型都有与其关联的某些限定。应该阅读 ProxyType 文档编制,要小心谨慎在选择要使用的代理类型之前。

注意: 对目前已连接套接字所做的更改,不会生效。若需要更改已连接套接字,应重新连接它。

SOCKS5

从 Qt4 起 SOCKS5 的支持基于 RFC 1928 and RFC 1929 。支持的身份验证方法是无身份验证和用户名/密码身份验证。IPv4 和 IPv6 均支持。通过 SOCKS5 服务器解析域名若 QNetworkProxy::HostNameLookupCapability 被启用,否则,在本地解析它们并把 IP 地址发送给服务器。有几件事要记住当使用 SOCKS5 采用 QUdpSocket and QTcpServer :

采用 QUdpSocket 调用 bind() 可能因超时错误而失败。若把非 0 端口号传递给 bind() ,不保证会使用指定端口。使用 localPort() and localAddress() 以获取在使用中的实际地址和端口号。由于被代理的 UDP 要通过 2 个 UDP 连接,数据包更有可能被丢弃。

采用 QTcpServer 调用 listen() 可能因超时错误而失败。若把非 0 端口号传递给 listen() ,不保证会使用指定端口。使用 serverPort() and serverAddress() 以获取用于监听连接的实际地址和端口。SOCKS5 仅支持一个接受连接每次调用 listen() ,且每次调用都可能导致不同的 serverPort() 被使用。

另请参阅 QAbstractSocket and QTcpServer .

成员类型文档编制

enum QNetworkProxy:: Capability
flags QNetworkProxy:: Capabilities

这些标志指示给定代理服务器支持的能力。

QNetworkProxy 默认设置不同能力,当创建对象时 (见 QNetworkProxy::ProxyType for a list of the defaults). However, it is possible to change the capabilities after the object has been created with setCapabilities ().

The capabilities that QNetworkProxy supports are:

常量 描述
QNetworkProxy::TunnelingCapability 0x0001 能打开到远程主机的透明、隧道化 TCP 连接。代理服务器将从一侧到另一侧逐字传输且不进行缓存。
QNetworkProxy::ListeningCapability 0x0002 能创建监听套接字并等待来自远程主机的 TCP 连接。
QNetworkProxy::UdpTunnelingCapability 0x0004 能中继 UDP 数据报凭借代理服务器和远程主机。
QNetworkProxy::CachingCapability 0x0008 能缓存传输内容。此能力特定于每种协议和代理类型。例如:HTTP 代理可以缓存采用 GET 命令传输的 Web 数据内容。
QNetworkProxy::HostNameLookupCapability 0x0010 能连接以履行查找远程主机名并连接到远程主机,而不是要求应用程序履行名称查找并只请求连接到 IP 地址。
QNetworkProxy::SctpTunnelingCapability 0x00020 能打开到远程主机的透明、隧道化 SCTP 连接。
QNetworkProxy::SctpListeningCapability 0x00040 能创建监听套接字并等待来自远程主机的传入 SCTP 连接。

Capabilities 类型是 typedef 对于 QFlags <Capability>。它存储 Capability 值的 OR 组合。

enum QNetworkProxy:: ProxyType

此枚举描述 Qt 提供的网络代理类型。

Qt 理解的 2 种代理类型:透明代理和缓存代理。第 1 组由可以处理任意数据传输的代理组成,而第 2 组只能处理特定请求。缓存代理只对可以使用它们的特定类有意义。

常量 描述
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 and 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 or 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 若原生 Header (头) headerName 被此代理使用。返回 false 若代理不是类型 HttpProxy or HttpCachingProxy .

该函数在 Qt 5.0 引入。

另请参阅 rawHeader () 和 setRawHeader ().

返回已知网络 Header (头) 的值为 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

返回 Header (头) 的原生形式为 headerName 。若不存在这种 Header (头) 或代理类型不是 HttpProxy or HttpCachingProxy ,空 QByteArray 被返回,可能难以区分存在但没有内容的 Header 头 (使用 hasRawHeader () 以确定 Header 头是否存在)。

可以设置原生 Header (头) 采用 setRawHeader () 或采用 setHeader ().

该函数在 Qt 5.0 引入。

另请参阅 header () 和 setRawHeader ().

[since 5.0] QList < QByteArray > QNetworkProxy:: rawHeaderList () const

返回在此网络代理中设置的所有原生 Header (头) 的列表。列表按 Header (头) 设置次序排列。

若代理不是类型 HttpProxy or HttpCachingProxy QList 被返回。

该函数在 Qt 5.0 引入。

另请参阅 hasRawHeader () 和 rawHeader ().

[static] void QNetworkProxy:: setApplicationProxy (const QNetworkProxy & networkProxy )

把应用程序级别的网络代理设为 networkProxy .

QAbstractSocket or 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 )

Sets the value of the known header header value ,覆盖任何先前设置的 Header (头)。此操作还设置等效原生 HTTP (头)。

若代理不是类型 HttpProxy or 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 )

设置 Header (头) headerName 到值 headerValue 。若 headerName 对应已知 Header (头部) (见 QNetworkRequest::KnownHeaders ),原生格式将被剖析,相应 cooked 头也将被设置。

例如:

request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT"));
					

还会把已知 LastModifiedHeader 头设为 QDateTime 剖析日期对象。

注意: 设置相同的头 2 次覆盖先前设置。要完成相同名称多个 HTTP 头的行为,应采用逗号 , 分隔它们并串联这 2 个值,然后设置一个原生 Header (头)。

若代理不是类型 HttpProxy or 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 ().

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 若它们相等 (相同的代理类型、服务器及用户名 口令)