内容表

上一话题

QNetworkInterface

下一话题

QNetworkProxyFactory

QNetworkProxy

QNetworkProxy class provides a network layer proxy. 更多

Inheritance diagram of PySide2.QtNetwork.QNetworkProxy

概要

函数

静态函数

详细描述

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

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

设置应用程序范围代理的备选方案是为各个套接字指定代理,使用 setProxy() and setProxy() . In this way, it is possible to disable the use of a proxy for specific sockets using the following code:

serverSocket.setProxy(QNetworkProxy.NoProxy)
											

网络代理不会被使用,若地址用在 connectToHost() , bind() or listen() 相当于 LocalHost or LocalHostIPv6 .

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

注意

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

SOCKS5

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

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

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

class QNetworkProxy

QNetworkProxy(type[, hostName=””[, port=0[, user=””[, password=””]]]])

QNetworkProxy(other)

param type

ProxyType

param hostName

unicode

param password

unicode

param port

quint16

param other

QNetworkProxy

param user

unicode

构造 QNetworkProxy with DefaultProxy 类型。

代理类型的确定通过 applicationProxy() ,其默认为 NoProxy 或系统范围代理,若配置了的话。

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

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

另请参阅

capabilities()

构造副本为 other .

PySide2.QtNetwork.QNetworkProxy. ProxyType

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

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

常量

描述

QNetworkProxy.NoProxy

不使用代理

QNetworkProxy.DefaultProxy

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

QNetworkProxy.Socks5Proxy

Socks5 代理被使用

QNetworkProxy.HttpProxy

使用 HTTP 透明代理

QNetworkProxy.HttpCachingProxy

代理仅针对 HTTP 请求

QNetworkProxy.FtpCachingProxy

代理仅针对 FTP 请求

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

代理类型

描述

默认能力

SOCKS 5

用于任何连接种类的通用代理。支持 TCP、UDP、绑定到端口 (传入连接) 及身份验证。

TunnelingCapability , ListeningCapability , UdpTunnelingCapability , HostNameLookupCapability

HTTP

Implemented using the “CONNECT” command, supports only outgoing TCP connections; supports authentication.

TunnelingCapability , CachingCapability , HostNameLookupCapability

仅缓存 HTTP

使用正常 HTTP 命令实现,仅在 HTTP 请求上下文中有用 (见 QNetworkAccessManager )

CachingCapability , HostNameLookupCapability

缓存 FTP

使用 FTP 代理实现,仅在 FTP 请求上下文中有用 (见 QNetworkAccessManager )

CachingCapability , HostNameLookupCapability

Also note that you shouldn’t set the application default proxy ( setApplicationProxy() ) to a proxy that doesn’t have the TunnelingCapability 能力。若做了, QTcpSocket 将不知道如何打开连接。

PySide2.QtNetwork.QNetworkProxy. Capability

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

QNetworkProxy 默认设置不同能力,当创建对象时 (见 ProxyType 了解默认值列表)。不管怎样,在对象已创建之后改变能力是可能的采用 setCapabilities() .

The capabilities that QNetworkProxy supports are:

常量

描述

QNetworkProxy.TunnelingCapability

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

QNetworkProxy.ListeningCapability

能创建监听套接字并等待来自远程主机的 TCP 连接。

QNetworkProxy.UdpTunnelingCapability

能中继 UDP 数据报凭借代理服务器和远程主机。

QNetworkProxy.CachingCapability

Ability to cache the contents of the transfer. This capability is specific to each protocol and proxy type. For example, HTTP proxies can cache the contents of web data transferred with “GET” commands.

QNetworkProxy.HostNameLookupCapability

能连接以履行查找远程主机名并连接到远程主机,而不是要求应用程序履行名称查找并只请求连接到 IP 地址。

QNetworkProxy.SctpTunnelingCapability

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

QNetworkProxy.SctpListeningCapability

能创建监听套接字并等待来自远程主机的传入 SCTP 连接。

static PySide2.QtNetwork.QNetworkProxy. applicationProxy ( )
返回类型

QNetworkProxy

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

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

PySide2.QtNetwork.QNetworkProxy. capabilities ( )
返回类型

Capabilities

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

PySide2.QtNetwork.QNetworkProxy. hasRawHeader ( headerName )
参数

headerName QByteArray

返回类型

bool

返回 true 若原生头 headerName 被此代理使用。返回 false 若代理不是类型 HttpProxy or HttpCachingProxy .

PySide2.QtNetwork.QNetworkProxy. header ( header )
参数

header KnownHeaders

返回类型

object

返回已知网络 Header 头的值为 header 若它被此代理所用。若不存在,返回 QVariant() (即:无效变体)。

另请参阅

KnownHeaders rawHeader() setHeader()

PySide2.QtNetwork.QNetworkProxy. hostName ( )
返回类型

unicode

返回代理主机的主机名。

PySide2.QtNetwork.QNetworkProxy. isCachingProxy ( )
返回类型

bool

返回 true 若此代理支持 CachingCapability 能力。

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

PySide2.QtNetwork.QNetworkProxy. isTransparentProxy ( )
返回类型

bool

返回 true 若此代理支持透明隧道化的 TCP 连接。这匹配 TunnelingCapability 能力。

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

PySide2.QtNetwork.QNetworkProxy. __ne__ ( other )
参数

other QNetworkProxy

返回类型

bool

比较此网络代理的值与 other 并返回 true 若它们不同。

PySide2.QtNetwork.QNetworkProxy. __eq__ ( other )
参数

other QNetworkProxy

返回类型

bool

比较此网络代理的值与 other 并返回 true 若它们相等 (相同的代理类型、服务器及用户名 口令)

PySide2.QtNetwork.QNetworkProxy. password ( )
返回类型

unicode

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

PySide2.QtNetwork.QNetworkProxy. port ( )
返回类型

quint16

返回代理主机的端口。

PySide2.QtNetwork.QNetworkProxy. rawHeader ( headerName )
参数

headerName QByteArray

返回类型

QByteArray

返回 Header 头的原生形式为 headerName 。若不存在这种 Header 头或代理类型不是 HttpProxy or HttpCachingProxy ,空 QByteArray 被返回,可能难以区分存在但没有内容的 Header 头 (使用 hasRawHeader() to find out if the header exists or not).

原生 Header 头可以被设置采用 setRawHeader() or with setHeader() .

PySide2.QtNetwork.QNetworkProxy. rawHeaderList ( )
返回类型

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

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

static PySide2.QtNetwork.QNetworkProxy. setApplicationProxy ( proxy )
参数

proxy QNetworkProxy

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

QAbstractSocket or QTcpSocket 拥有 DefaultProxy 类型,那么 QNetworkProxy 采用此函数所用设置。若希望在确定使用哪种代理方面更具灵活性,使用 QNetworkProxyFactory 类。

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

PySide2.QtNetwork.QNetworkProxy. setCapabilities ( capab )
参数

capab Capabilities

将此代理的能力设为 capabilities .

PySide2.QtNetwork.QNetworkProxy. setHeader ( header , value )
参数
  • header KnownHeaders

  • value – object

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

若代理不是类型 HttpProxy or HttpCachingProxy 这没有效果。

另请参阅

KnownHeaders setRawHeader() header()

PySide2.QtNetwork.QNetworkProxy. setHostName ( hostName )
参数

hostName – unicode

把代理主机的主机名设为 hostName .

PySide2.QtNetwork.QNetworkProxy. setPassword ( password )
参数

password – unicode

把代理身份验证的口令设为 password .

PySide2.QtNetwork.QNetworkProxy. setPort ( port )
参数

port quint16

把代理主机的端口设为 port .

PySide2.QtNetwork.QNetworkProxy. setRawHeader ( headerName , value )
参数
  • headerName QByteArray

  • value QByteArray

设置 Header 头 headerName 到值 headerValue 。若 headerName 对应已知 Header 头 (见 KnownHeaders ), the raw format will be parsed and the corresponding “cooked” header will be set as well.

例如:

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

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

注意

Setting the same header twice overrides the previous setting. To accomplish the behaviour of multiple HTTP headers of the same name, you should concatenate the two values, separating them with a comma (“,”) and set one single raw header.

若代理不是类型 HttpProxy or HttpCachingProxy 这没有效果。

PySide2.QtNetwork.QNetworkProxy. setType ( type )
参数

type ProxyType

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

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

PySide2.QtNetwork.QNetworkProxy. setUser ( userName )
参数

userName – unicode

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

PySide2.QtNetwork.QNetworkProxy. swap ( other )
参数

other QNetworkProxy

交换此网络代理实例采用 other 。此函数非常快,且从不失败。

PySide2.QtNetwork.QNetworkProxy. type ( )
返回类型

ProxyType

返回此实例的代理类型。

另请参阅

setType()

PySide2.QtNetwork.QNetworkProxy. user ( )
返回类型

unicode

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