QNetworkProxy 类

The QNetworkProxy class provides a network layer proxy. 更多...

头: #include <QNetworkProxy>
Since: Qt 4.1

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

公共类型

flags Capabilities
enum Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability }
enum ProxyType { NoProxy, DefaultProxy, Socks5Proxy, HttpProxy, HttpCachingProxy, FtpCachingProxy }

公共函数

QNetworkProxy ()
QNetworkProxy (ProxyType type , const QString & hostName = QString(), quint16 port = 0, const QString & user = QString(), const QString & password = QString())
QNetworkProxy (const QNetworkProxy & other )
~QNetworkProxy ()
Capabilities capabilities () const
QString hostName () const
bool isCachingProxy () const
bool isTransparentProxy () const
QString password () const
quint16 port () const
void setCapabilities (Capabilities capabilities )
void setHostName (const QString & hostName )
void setPassword (const QString & password )
void setPort (quint16 port )
void setType (QNetworkProxy::ProxyType type )
void setUser (const QString & user )
QNetworkProxy::ProxyType type () const
QString user () const
bool operator!= (const QNetworkProxy & other ) const
QNetworkProxy & operator= (const QNetworkProxy & other )
bool operator== (const QNetworkProxy & other ) const

静态公共成员

QNetworkProxy applicationProxy ()
void setApplicationProxy (const QNetworkProxy & networkProxy )

详细描述

The QNetworkProxy class provides a network layer proxy.

QNetworkProxy provides the method for configuring network layer proxy support to the Qt network classes. The currently supported classes are QAbstractSocket , QTcpSocket , QUdpSocket , QTcpServer , QNetworkAccessManager and QFtp 。代理支持被设计成尽可能透明。这意味着已编写的现有启用网络的应用程序,应该使用以下代码自动支持网络代理。

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

The SOCKS5 support in Qt 4 is based on 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 了解默认值列表)。不管怎样,在对象已创建之后改变能力是可能的采用 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 地址。

该枚举在 Qt 4.5 引入或被修改。

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 transparent proxying is used (This value was introduced in 4.3.)
QNetworkProxy::HttpCachingProxy 4 Proxying for HTTP requests only (This value was introduced in 4.4.)
QNetworkProxy::FtpCachingProxy 5 Proxying for FTP requests only (This value was introduced in 4.4.)

下表列出了不同的代理类型及其能力。由于每种代理类型有不同能力,在选取代理类型之前理解它们很重要。

代理类型 描述 默认能力
SOCKS 5 用于任何连接种类的通用代理。支持 TCP、UDP、绑定到端口 (传入连接) 及身份验证。 TunnelingCapability , ListeningCapability , UdpTunnelingCapability , HostNameLookupCapability
HTTP 使用 CONNECT 命令实现,仅支持传出 TCP 连接;支持身份验证。 TunnelingCapability , CachingCapability , HostNameLookupCapability
仅缓存 HTTP 使用正常 HTTP 命令实现,仅在 HTTP 请求上下文中有用 (见 QNetworkAccessManager ) CachingCapability , HostNameLookupCapability
缓存 FTP 使用 FTP 代理实现,仅在 FTP 请求上下文中有用 (见 QFtp , QNetworkAccessManager ) CachingCapability , HostNameLookupCapability

另请注意:不应该设置应用程序默认代理 ( setApplicationProxy ()) 到代理没有 TunnelingCapability 能力。若做了, QTcpSocket 将不知道如何打开连接。

另请参阅 setType (), type (), capabilities (),和 setCapabilities ().

成员函数文档编制

QNetworkProxy:: QNetworkProxy ()

构造 QNetworkProxy with DefaultProxy type; the proxy type is determined by applicationProxy (),默认为 NoProxy .

另请参阅 setType () 和 setApplicationProxy ().

QNetworkProxy:: QNetworkProxy ( ProxyType type , const QString & hostName = QString(), quint16 port = 0, const QString & user = QString(), const QString & password = QString())

构造 QNetworkProxy with type , hostName , port , user and password .

默认能力的代理类型 type 是自动设置的。

另请参阅 capabilities ().

QNetworkProxy:: QNetworkProxy (const QNetworkProxy & other )

构造副本为 other .

QNetworkProxy:: ~QNetworkProxy ()

销毁 QNetworkProxy 对象。

[static] QNetworkProxy QNetworkProxy:: applicationProxy ()

返回应用程序级别的网络代理。

QAbstractSocket or QTcpSocket 拥有 QNetworkProxy::DefaultProxy 类型,那么 QNetworkProxy 被返回通过使用此函数。

另请参阅 QNetworkProxyFactory , setApplicationProxy (), QAbstractSocket::proxy (),和 QTcpServer::proxy ().

Capabilities QNetworkProxy:: capabilities () const

返回此代理服务器的能力。

该函数在 Qt 4.5 引入。

另请参阅 setCapabilities () 和 type ().

QString QNetworkProxy:: hostName () const

返回代理主机的主机名。

另请参阅 setHostName (), setPort (),和 port ().

bool QNetworkProxy:: isCachingProxy () const

Returns true if this proxy supports the QNetworkProxy::CachingCapability 能力。

在 Qt 4.4,能力会被捆绑到代理类型,但从 Qt 4.5 起,从代理移除缓存能力是可能的通过调用 setCapabilities ().

该函数在 Qt 4.4 引入。

另请参阅 capabilities (), type (),和 isTransparentProxy ().

bool QNetworkProxy:: isTransparentProxy () const

Returns true if this proxy supports transparent tunneling of TCP connections. This matches the QNetworkProxy::TunnelingCapability 能力。

在 Qt 4.4,能力会被捆绑到代理类型,但从 Qt 4.5 起,从代理移除缓存能力是可能的通过调用 setCapabilities ().

该函数在 Qt 4.4 引入。

另请参阅 capabilities (), type (),和 isCachingProxy ().

QString QNetworkProxy:: password () const

返回用于身份验证的口令。

另请参阅 user (), setPassword (),和 setUser ().

quint16 QNetworkProxy:: port () const

返回代理主机的端口。

另请参阅 setHostName (), setPort (),和 hostName ().

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

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

QAbstractSocket or QTcpSocket 拥有 QNetworkProxy::DefaultProxy 类型,那么 QNetworkProxy set with this function is used. If you want more flexibility in determining which the proxy, use the QNetworkProxyFactory 类。

通过此函数设置的默认代理值将覆盖应用程序代理工厂设置采用 QNetworkProxyFactory::setApplicationProxyFactory .

另请参阅 QNetworkProxyFactory , applicationProxy (), QAbstractSocket::setProxy (),和 QTcpServer::setProxy ().

void QNetworkProxy:: setCapabilities ( Capabilities capabilities )

将此代理的能力设为 capabilities .

该函数在 Qt 4.5 引入。

另请参阅 setType () 和 capabilities ().

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 ().

void QNetworkProxy:: setType ( QNetworkProxy::ProxyType type )

把此实例的代理类型设为 type .

注意:更改代理类型不会改变设置能力由此 QNetworkProxy 对象保持的,若有设置任何能力采用 setCapabilities ().

另请参阅 type () 和 setCapabilities ().

void QNetworkProxy:: setUser (const QString & user )

把代理身份验证的用户名设为 user .

另请参阅 user (), setPassword (),和 password ().

QNetworkProxy::ProxyType QNetworkProxy:: type () const

返回此实例的代理类型。

另请参阅 setType ().

QString QNetworkProxy:: user () const

返回用于身份验证的用户名。

另请参阅 setUser (), setPassword (),和 password ().

bool QNetworkProxy:: operator!= (const QNetworkProxy & other ) const

比较此网络代理的值与 other and returns true if they differ.

该函数在 Qt 4.4 引入。

QNetworkProxy & QNetworkProxy:: operator= (const QNetworkProxy & other )

赋值网络代理值 other 到此网络代理。

该函数在 Qt 4.2 引入。

bool QNetworkProxy:: operator== (const QNetworkProxy & other ) const

比较此网络代理的值与 other and returns true if they are equal (same proxy type, server as well as username and password)

该函数在 Qt 4.4 引入。