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 文档编制,要小心谨慎在选择要使用的代理类型之前。
注意: 对目前已连接套接字所做的更改,不会生效。若需要更改已连接套接字,应重新连接它。
从 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 .
这些标志指示给定代理服务器支持的能力。
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 组合。
此枚举描述 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 ().
构造副本为 other .
构造 QNetworkProxy 采用 type , hostName , port , user and password .
默认能力的代理类型 type 是自动设置的。
另请参阅 capabilities ().
构造 QNetworkProxy 采用 DefaultProxy 类型。
代理类型的确定通过 applicationProxy (),默认为 NoProxy 或系统范围代理,若配置了的话。
另请参阅 setType () 和 setApplicationProxy ().
赋值网络代理值 other 到此网络代理。
销毁 QNetworkProxy 对象。
[static]
QNetworkProxy
QNetworkProxy::
applicationProxy
()
返回应用程序级别的网络代理。
若 QAbstractSocket or QTcpSocket 拥有 QNetworkProxy::DefaultProxy 类型,那么 QNetworkProxy 被返回通过使用此函数。
另请参阅 QNetworkProxyFactory , setApplicationProxy (), QAbstractSocket::proxy (),和 QTcpServer::proxy ().
返回此代理服务器的能力。
另请参阅 setCapabilities () 和 type ().
[since 5.0]
bool
QNetworkProxy::
hasRawHeader
(const
QByteArray
&
headerName
) const
返回
true
若原生 Header (头)
headerName
被此代理使用。返回
false
若代理不是类型
HttpProxy
or
HttpCachingProxy
.
该函数在 Qt 5.0 引入。
另请参阅 rawHeader () 和 setRawHeader ().
[since 5.0]
QVariant
QNetworkProxy::
header
(
QNetworkRequest::KnownHeaders
header
) const
返回已知网络 Header (头) 的值为 header 若它被此代理所用。若不存在,返回 QVariant() (即:无效变体)。
该函数在 Qt 5.0 引入。
另请参阅 QNetworkRequest::KnownHeaders , rawHeader (),和 setHeader ().
返回代理主机的主机名。
另请参阅 setHostName (), setPort (),和 port ().
返回
true
若此代理支持
QNetworkProxy::CachingCapability
能力。
在 Qt 4.4,能力会被捆绑到代理类型,但从 Qt 4.5 起,从代理移除缓存能力是可能的通过调用 setCapabilities ().
另请参阅 capabilities (), type (),和 isTransparentProxy ().
返回
true
若此代理支持透明隧道化的 TCP 连接。这匹配
QNetworkProxy::TunnelingCapability
能力。
在 Qt 4.4,能力会被捆绑到代理类型,但从 Qt 4.5 起,从代理移除缓存能力是可能的通过调用 setCapabilities ().
另请参阅 capabilities (), type (),和 isCachingProxy ().
返回用于身份验证的口令。
另请参阅 user (), setPassword (),和 setUser ().
返回代理主机的端口。
另请参阅 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 ().
将此代理的能力设为 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 ().
把代理主机的主机名设为 hostName .
另请参阅 hostName (), setPort (),和 port ().
把代理身份验证的口令设为 password .
另请参阅 user (), setUser (),和 password ().
把代理主机的端口设为 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 ().
把此实例的代理类型设为 type .
注意:更改代理类型不会改变设置能力由此 QNetworkProxy 对象保持的,若有设置任何能力采用 setCapabilities ().
另请参阅 type () 和 setCapabilities ().
把代理身份验证的用户名设为 user .
另请参阅 user (), setPassword (),和 password ().
[since 5.0]
void
QNetworkProxy::
swap
(
QNetworkProxy
&
other
)
交换此网络代理实例采用 other 。此函数非常快且从不失败。
该函数在 Qt 5.0 引入。
返回此实例的代理类型。
另请参阅 setType ().
返回用于身份验证的用户名。
另请参阅 setUser (), setPassword (),和 password ().
比较此网络代理的值与
other
并返回
true
若它们不同。
比较此网络代理的值与
other
并返回
true
若它们相等 (相同的代理类型、服务器及用户名 口令)