class QNetworkProxy#

QNetworkProxy 类提供一个网络层代理。 更多信息...

摘要#

方法#

静态函数#

注意

本文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE 上创建一个产品问题报告来通知我们

详细描述#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

QNetworkProxy 为Qt网络类提供了配置网络层代理支持的函数。目前支持的类包括 QAbstractSocket , QTcpSocket , QUdpSocket , QTcpServerQNetworkAccessManager 。代理支持被设计得尽可能透明。这意味着您所编写的现有网络启用应用程序应自动支持网络代理,以下代码示例可见。

proxy = QNetworkProxy()
proxy.setType(QNetworkProxy.Socks5Proxy)
proxy.setHostName("proxy.example.com")
proxy.setPort(1080)
proxy.setUser("username")
proxy.setPassword("password")
QNetworkProxy.setApplicationProxy(proxy)

设置应用程序范围代理的替代方法是使用 setProxy()setProxy() 指定个别套接字的代理。这样,您可以使用以下代码禁用特定套接字的代理使用。

serverSocket.setProxy(QNetworkProxy.NoProxy)

当在 connectToHost()bind()listen() 中使用的地址与 LocalHostLocalHostIPv6 相等时,不使用网络代理。

每种代理支持都有关联的某些限制。在选择要使用的代理类型之前,应仔细阅读 ProxyType 文档。

注意

对当前已连接套接字的更改不会生效。如果您需要更改一个连接套接字,您应重新连接它。

SOCKS5#

Qt 4开始支持的 SOCKS5 依赖于 RFC 1928RFC 1929 。支持的认证方法是无认证和用户名/密码认证。支持 IPv4 和 IPv6。如果启用了 HostNameLookupCapability,域名将通过 SOCKS5 服务器解析,否则在本地解析并将 IP 地址发送到服务器。使用 SOCKS5 时,与 QUdpSocketQTcpServer 一起使用时有一些需要注意的事项

使用 QUdpSocket,对 bind() 的调用可能因超时错误而失败。如果将除了 0 之外的端口号传给 bind(),则无法保证它将使用指定的端口。请使用 localPort()localAddress() 获取实际正在使用的地址和端口号。因为经过代理的 UDP 需要通过两个 UDP 连接,所以数据包丢失的可能性更高。

使用 QTcpServer 调用 listen() 可能会因为超时错误而失败。如果向 listen() 传递的不是 0 的端口号,那么它使用的不是指定的端口号就不再有保证。使用 serverPort()serverAddress() 来获取用于监听连接的实际地址和端口号。SOCKS5 仅支持在每个 listen() 调用中接受一个连接,并且每个调用可能会导致使用不同的 serverPort()

class ProxyType#

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

Qt 理解两种类型的代理:透明代理和缓存代理。第一组包括可以处理任何任意数据传输的代理,而第二组只能处理特定的请求。缓存代理仅在可以使用的特定类中才有意义。

常量

描述

QNetworkProxy.NoProxy

不使用代理

QNetworkProxy.DefaultProxy

代理基于使用 setApplicationProxy() 设置的应用程序代理确定

QNetworkProxy.Socks5Proxy

使用 Socks5 代理

QNetworkProxy.HttpProxy

使用 HTTP 透明代理

QNetworkProxy.HttpCachingProxy

仅对 HTTP 请求进行代理

QNetworkProxy.FtpCachingProxy

仅对 FTP 请求进行代理

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

代理类型

描述

默认功能

SOCKS 5

通用代理,可用于任何类型的连接。支持 TCP、UDP、绑定到端口(入站连接)和认证。

TunnelingCapability(隧道能力),ListeningCapability(监听能力),UdpTunnelingCapability(UDP隧道能力),HostNameLookupCapability(主机名查找能力)

HTTP

通过使用“CONNECT”命令实现,仅支持出站TCP连接;支持验证。

TunnelingCapability(隧道能力),CachingCapability(缓存能力),HostNameLookupCapability(主机名查找能力)

仅缓存HTTP

通过普通HTTP命令实现,仅在HTTP请求语境中(参见 QNetworkAccessManager )有用。

CachingCapability(缓存能力),HostNameLookupCapability(主机名查找能力)

缓存FTP

使用FTP代理实现,仅在FTP请求语境中(参见 QNetworkAccessManager )有用。

CachingCapability(缓存能力),HostNameLookupCapability(主机名查找能力)

此外,请注意不要将应用程序默认代理( setApplicationProxy() )设置为不支持 TunnelingCapability 能力的代理。如果您这样设置,QTcpSocket 将不知道如何打开连接。

class Capability#

(继承自 enum.Flag)这些标志表示特定代理服务器所支持的能力。

QNetworkProxy 在对象创建时默认设置了不同的功能(有关默认值的列表,请参见 ProxyType)。然而,可以通过 setCapabilities() 方法在对象创建后更改功能。

QNetworkProxy 所支持的功能包括

常量

描述

QNetworkProxy.TunnelingCapability

能够打开透明、隧道的 TCP 连接到远程主机。代理服务器将传输内容逐字逐句地从一侧传输到另一侧,并且不进行缓存。

QNetworkProxy.ListeningCapability

能够创建一个监听套接字并等待从远程主机传来的 TCP 连接。

QNetworkProxy.UdpTunnelingCapability

能够通过代理服务器转发和接收远程主机的 UDP 数据报。

QNetworkProxy.CachingCapability

能够缓存传输内容。此功能针对每个协议和代理类型特定。例如,HTTP 代理可以缓存使用“GET”命令传输的 Web 数据的内容。

QNetworkProxy.HostNameLookupCapability

能够连接到远程主机名执行查找操作并连接到它,而不是要求应用程序只执行名称查找和请求连接到 IP 地址。

QNetworkProxy.SctpTunnelingCapability

能够打开透明、隧道的 SCTP 连接到远程主机。

QNetworkProxy.SctpListeningCapability

能够创建一个监听套接字并等待从远程主机传来的 SCTP 连接。

__init__(type[, hostName=""[, port=0[, user=""[, password=""]]]])#
参数:
  • typeProxyType

  • hostName – str

  • port – int

  • user – str

  • password – str

使用 typehostNameportuserpassword 构建一个 QNetworkProxy

type 代理类型的默认功能将自动设置。

另请参阅

capabilities()

__init__(other)
参数:

otherQNetworkProxy

构建 other 的副本。

__init__()

使用DefaultProxy类型构建一个QNetworkProxy

代理类型由applicationProxy()函数确定,默认为NoProxy或者当系统配置了全局代理时使用全局代理。

静态 applicationProxy()#
返回类型:

QNetworkProxy

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

如果QAbstractSocketQTcpSocketDefaultProxy类型,则此函数返回的QNetworkProxy会被使用。

capabilities()#
返回类型:

Capability 组合

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

另请参阅

setCapabilities() type()

hasRawHeader(headerName)#
参数:

headerNameQByteArray

返回类型:

bool

如果原始头 headerName 在此代理中使用,则返回 true。如果代理不是类型 HttpProxyHttpCachingProxy,则返回 false

header(header)#
参数:

headerKnownHeaders

返回类型:

对象

如果 header 所指的已知网络头在此代理中使用,则返回其值。如果不存在,则返回 QVariant()(即一个无效的变体)。

hostName()#
返回类型:

字符串

返回代理主机的名称。

isCachingProxy()#
返回类型:

bool

如果此代理支持 CachingCapability 功能,则返回 true

在 Qt 4.4 中,该功能与代理类型相关联,但从 Qt 4.5 开始,可以通过调用 setCapabilities() 方法从代理中删除缓存功能。

isTransparentProxy()#
返回类型:

bool

如果此代理支持TCP连接的透明隧道传输,则返回true。这与TunnelingCapability的能力匹配。

在 Qt 4.4 中,该功能与代理类型相关联,但从 Qt 4.5 开始,可以通过调用 setCapabilities() 方法从代理中删除缓存功能。

__ne__(other)#
参数:

otherQNetworkProxy

返回类型:

bool

比较此网络代理与other的值,如果它们不同则返回true

__eq__(other)#
参数:

otherQNetworkProxy

返回类型:

bool

比较此网络代理与other的值,如果它们相等(代理类型、服务器以及用户名和密码相同)则返回true

password()#
返回类型:

字符串

返回用于认证的密码。

port()#
返回类型:

int

返回代理主机的端口号。

rawHeader(headerName)#
参数:

headerNameQByteArray

返回类型:

QByteArray

返回头 headerName 的原始形式。如果不存在此类头或者代理类型不是 HttpProxyHttpCachingProxy,则返回一个空的 QByteArray,这可能与具有内容但为空的头部无法区分(使用 hasRawHeader() 来判断是否存在此类头部)。

可以使用 setRawHeader()setHeader() 设置原始头部。

另请参阅

header() setRawHeader()

rawHeaderList()#
返回类型:

QByteArray 对象列表

返回设置在此网络代理中的所有原始头部的列表。列表按头部的设置顺序排列。

如果代理类型不是 HttpProxyHttpCachingProxy,则返回一个空的 QList。

静态 setApplicationProxy(proxy)#
参数:

proxyQNetworkProxy

设置应用级别网络代理为 networkProxy

如果QAbstractSocketQTcpSocket具有DefaultProxy类型,则使用此函数设置的QNetworkProxy。如果您想要在确定使用哪个代理方面获得更多灵活性,请使用QNetworkProxyFactory类。

使用此函数设置默认代理值将覆盖由setApplicationProxyFactory设置的程序代理工厂,并禁用系统代理的使用。

另请参阅

QNetworkProxyFactory applicationProxy() setProxy() setProxy()

setCapabilities(capab)#
参数:

capabCapability的组合

将此代理的能设置为一个能力列表。

另请参阅

setType() capabilities()

setHeader(header, value)#
参数:

将已知头header的值设置为value,覆盖任何之前设置的头部。此操作还会设置等效的原始HTTP头。

如果代理不是类型HttpProxyHttpCachingProxy,则此操作没有效果。

setHostName(hostName)#
参数:

hostName – str

设置代理主机的名字为 hostName

另请参阅

hostName() setPort() port()

setPassword(password)#
参数:

password – str

设置代理认证密码为 password

另请参阅

user() setUser() password()

setPort(port)#
参数:

port – int

设置代理主机的端口为 port

setRawHeader(headerName, value)#
参数:

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

设置头 headerName 的值为 headerValue。如果 headerName 是已知的头(参见 KnownHeaders),将解析原始格式,同时设置对应的“ cooked”头。

例如:

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

也会将已知的头 LastModifiedHeader 设置为解析的日期的 QDateTime 对象。

注意

重复设置相同的头会覆盖之前的设置。为了实现具有相同名称的多个 HTTP 头的行为,您应该将这两个值连接起来,用逗号(“,”)分隔,并设置一个单个的原始头。

如果代理不是类型HttpProxyHttpCachingProxy,则此操作没有效果。

setType(type)#
参数:

typeProxyType

将此实例的代理类型设置为 type

请注意,更改代理的类型不会改变此 QNetworkProxy 对象所拥有的功能集合,如果已经用 setCapabilities() 设置了任何功能。

另请参阅

type() setCapabilities()

setUser(userName)#
参数:

userName - str

将代理认证的用户名设置为 user

swap(other)#
参数:

otherQNetworkProxy

将此网络代理实例与 other 交换。此函数非常快且永远不会失败。

type()#
返回类型:

代理类型

返回此实例的代理类型。

另请参阅

setType()

user()#
返回类型:

字符串

返回用于认证的用户名。