PySide.QtNetwork.QNetworkProxy class provides a network layer proxy.
PySide.QtNetwork.QNetworkProxy provides the method for configuring network layer proxy support to the Qt network classes. The currently supported classes are PySide.QtNetwork.QAbstractSocket , PySide.QtNetwork.QTcpSocket , PySide.QtNetwork.QUdpSocket , PySide.QtNetwork.QTcpServer , PySide.QtNetwork.QNetworkAccessManager and PySide.QtNetwork.QFtp 。代理支持被设计成尽可能透明。这意味着已编写的现有启用网络的应用程序,应该使用以下代码自动支持网络代理。
proxy = QNetworkProxy()
proxy.setType(QNetworkProxy.Socks5Proxy)
proxy.setHostName("proxy.example.com")
proxy.setPort(1080)
proxy.setUser("username")
proxy.setPassword("password")
QNetworkProxy.setApplicationProxy(proxy)
设置应用程序范围代理的备选方案是为各个套接字指定代理,使用 QAbstractSocket.setProxy() and QTcpServer.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)
网络代理不会被使用,若地址用在 PySide.QtNetwork.QAbstractSocket.connectToHost() , PySide.QtNetwork.QUdpSocket.bind() or PySide.QtNetwork.QTcpServer.listen() 相当于 QHostAddress.LocalHost or QHostAddress.LocalHostIPv6 .
代理支持的各种类型都有与其关联的某些限定。应该阅读 QNetworkProxy.ProxyType 文档编制,在选择要使用的代理类型之前。
注意
对目前已连接套接字所做的更改,不会生效。若需要更改已连接套接字,应重新连接它。
The SOCKS5 support in Qt 4 is based on RFC 1928 and RFC 1929 。支持的身份验证方法是无身份验证和用户名/密码身份验证。IPv4 和 IPv6 均支持。通过 SOCKS5 服务器解析域名若 QNetworkProxy.HostNameLookupCapability 被启用,否则,在本地解析它们并把 IP 地址发送给服务器。有几件事要记住当使用 SOCKS5 采用 PySide.QtNetwork.QUdpSocket and PySide.QtNetwork.QTcpServer :
With PySide.QtNetwork.QUdpSocket 调用 PySide.QtNetwork.QUdpSocket.bind() 可能因超时错误而失败。若把非 0 端口号传递给 PySide.QtNetwork.QUdpSocket.bind() ,不保证会使用指定端口。使用 PySide.QtNetwork.QUdpSocket.localPort() and PySide.QtNetwork.QUdpSocket.localAddress() 以获取在使用中的实际地址和端口号。由于被代理的 UDP 要通过 2 个 UDP 连接,数据包更有可能被丢弃。
With PySide.QtNetwork.QTcpServer 调用 PySide.QtNetwork.QTcpServer.listen() 可能因超时错误而失败。若把非 0 端口号传递给 PySide.QtNetwork.QTcpServer.listen() ,不保证会使用指定端口。使用 PySide.QtNetwork.QTcpServer.serverPort() and PySide.QtNetwork.QTcpServer.serverAddress() 以获取用于监听连接的实际地址和端口。SOCKS5 仅支持一个接受连接每次调用 PySide.QtNetwork.QTcpServer.listen() ,且每次调用都可能导致不同的 PySide.QtNetwork.QTcpServer.serverPort() 被使用。
| 参数: |
|
|---|
构造 PySide.QtNetwork.QNetworkProxy with DefaultProxy type; the proxy type is determined by PySide.QtNetwork.QNetworkProxy.applicationProxy() ,其默认为 NoProxy .
构造 PySide.QtNetwork.QNetworkProxy with type , hostName , port , user and password .
默认能力的代理类型 type 是自动设置的。
构造副本为 other .
此枚举描述 Qt 提供的网络代理类型。
Qt 理解的 2 种代理类型:透明代理和缓存代理。第 1 组由可以处理任意数据传输的代理组成,而第 2 组只能处理特定请求。缓存代理只对可以使用它们的特定类有意义。
| 常量 | 描述 |
|---|---|
| QNetworkProxy.NoProxy | 不使用代理 |
| QNetworkProxy.DefaultProxy | 基于应用程序代理设置确定代理,使用 PySide.QtNetwork.QNetworkProxy.setApplicationProxy() |
| QNetworkProxy.Socks5Proxy | Socks5 代理被使用 |
| QNetworkProxy.HttpProxy | HTTP transparent proxying is used (This value was introduced in 4.3.) |
| QNetworkProxy.HttpCachingProxy | Proxying for HTTP requests only (This value was introduced in 4.4.) |
| QNetworkProxy.FtpCachingProxy | Proxying for FTP requests only (This value was introduced in 4.4.) |
下表列出了不同的代理类型及其能力。由于每种代理类型有不同能力,在选取代理类型之前理解它们很重要。
| 代理类型 | 描述 | 默认能力 |
| 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 请求上下文中有用 (见 PySide.QtNetwork.QNetworkAccessManager ) | CachingCapability , HostNameLookupCapability |
| 缓存 FTP | 使用 FTP 代理实现,仅在 FTP 请求上下文中有用 (见 PySide.QtNetwork.QFtp , PySide.QtNetwork.QNetworkAccessManager ) | CachingCapability , HostNameLookupCapability |
另请注意:不应该设置应用程序默认代理 ( PySide.QtNetwork.QNetworkProxy.setApplicationProxy() ) to a proxy that doesn't have the TunnelingCapability 能力。若做了, PySide.QtNetwork.QTcpSocket 将不知道如何打开连接。
这些标志指示给定代理服务器支持的能力。
PySide.QtNetwork.QNetworkProxy 默认设置不同能力,当创建对象时 (见 QNetworkProxy.ProxyType 了解默认值列表)。不管怎样,在对象已创建之后改变能力是可能的采用 PySide.QtNetwork.QNetworkProxy.setCapabilities() .
The capabilities that PySide.QtNetwork.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 地址。 |
| 返回类型: | PySide.QtNetwork.QNetworkProxy |
|---|
返回应用程序级别的网络代理。
若 PySide.QtNetwork.QAbstractSocket or PySide.QtNetwork.QTcpSocket 拥有 QNetworkProxy.DefaultProxy 类型,那么 PySide.QtNetwork.QNetworkProxy 被返回通过使用此函数。
| 返回类型: | PySide.QtNetwork.QNetworkProxy.Capabilities |
|---|
返回此代理服务器的能力。
| 返回类型: | unicode |
|---|
返回代理主机的主机名。
| 返回类型: | PySide.QtCore.bool |
|---|
Returns true if this proxy supports the QNetworkProxy.CachingCapability 能力。
在 Qt 4.4,能力被绑到代理类型,但从 Qt 4.5 起,移除代理缓存能力是可能的通过调用 PySide.QtNetwork.QNetworkProxy.setCapabilities() .
| 返回类型: | PySide.QtCore.bool |
|---|
Returns true if this proxy supports transparent tunneling of TCP connections. This matches the QNetworkProxy.TunnelingCapability 能力。
在 Qt 4.4,能力被绑到代理类型,但从 Qt 4.5 起,移除代理缓存能力是可能的通过调用 PySide.QtNetwork.QNetworkProxy.setCapabilities() .
| 参数: | other – PySide.QtNetwork.QNetworkProxy |
|---|---|
| 返回类型: | PySide.QtCore.bool |
比较此网络代理的值与 other and returns true if they differ.
| 参数: | other – PySide.QtNetwork.QNetworkProxy |
|---|---|
| 返回类型: | PySide.QtCore.bool |
比较此网络代理的值与 other and returns true if they are equal (same proxy type, server as well as username and password)
| 返回类型: | unicode |
|---|
返回用于身份验证的口令。
| 返回类型: | PySide.QtCore.quint16 |
|---|
返回代理主机的端口。
| 参数: | proxy – PySide.QtNetwork.QNetworkProxy |
|---|
把应用程序级别的网络代理设为 networkProxy .
若 PySide.QtNetwork.QAbstractSocket or PySide.QtNetwork.QTcpSocket 拥有 QNetworkProxy.DefaultProxy 类型,那么 PySide.QtNetwork.QNetworkProxy set with this function is used. If you want more flexibility in determining which the proxy, use the PySide.QtNetwork.QNetworkProxyFactory 类。
Setting a default proxy value with this function will override the application proxy factory set with QNetworkProxyFactory::setApplicationProxyFactory.
| 参数: | capab – PySide.QtNetwork.QNetworkProxy.Capabilities |
|---|
| 参数: | hostName – unicode |
|---|
把代理主机的主机名设为 hostName .
| 参数: | password – unicode |
|---|
把代理身份验证的口令设为 password .
| 参数: | port – PySide.QtCore.quint16 |
|---|
把代理主机的端口设为 port .
| 参数: | type – PySide.QtNetwork.QNetworkProxy.ProxyType |
|---|
| 参数: | userName – unicode |
|---|
把代理身份验证的用户名设为 user .
| 返回类型: | PySide.QtNetwork.QNetworkProxy.ProxyType |
|---|
返回此实例的代理类型。
| 返回类型: | unicode |
|---|
返回用于身份验证的用户名。