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 文檔編製,要小心謹慎在選擇要使用的代理類型之前。
注意: 對目前已連接套接字所做的更改,不會生效。若需要更改已連接套接字,應重新連接它。
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 僅支持 1 個接受連接每次調用 listen() ,且每次調用都可能導緻不同的 serverPort() 被使用。
另請參閱 QAbstractSocket and QTcpServer .
這些標誌指示給定代理服務器支持的能力。
QNetworkProxy 默認設置不同能力,當創建對象時 (見 QNetworkProxy::ProxyType 瞭解默認列錶)。不管怎樣,在對象已創建之後改變能力是可能的采用 setCapabilities ().
能力對於 QNetworkProxy 支持置包括:
| 常量 | 值 | 描述 |
|---|---|---|
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 組閤。
此枚舉描述 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 with DefaultProxy type; the proxy type is determined by applicationProxy (),默認為 NoProxy .
另請參閱 setType () 和 setApplicationProxy ().
構造 QNetworkProxy with type , hostName , port , user and password .
默認能力的代理類型 type 是自動設置的。
另請參閱 capabilities ().
構造副本為 other .
銷毀 QNetworkProxy 對象。
[static]
QNetworkProxy
QNetworkProxy::
applicationProxy
()
返迴應用程序級彆的網絡代理。
若 QAbstractSocket or QTcpSocket 擁有 QNetworkProxy::DefaultProxy 類型,那麼 QNetworkProxy 被返迴通過使用此函數。
另請參閱 QNetworkProxyFactory , setApplicationProxy (), QAbstractSocket::proxy (),和 QTcpServer::proxy ().
返迴此代理服務器的能力。
該函數在 Qt 4.5 引入。
另請參閱 setCapabilities () 和 type ().
返迴代理主機的主機名。
另請參閱 setHostName (), setPort (),和 port ().
Returns true if this proxy supports the QNetworkProxy::CachingCapability 能力。
在 Qt 4.4,能力會被捆綁到代理類型,但從 Qt 4.5 起,從代理移除緩存能力是可能的通過調用 setCapabilities ().
該函數在 Qt 4.4 引入。
另請參閱 capabilities (), type (),和 isTransparentProxy ().
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 ().
返迴用於身份驗證的口令。
另請參閱 user (), setPassword (),和 setUser ().
返迴代理主機的端口。
另請參閱 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 ().
將此代理的能力設為 capabilities .
該函數在 Qt 4.5 引入。
另請參閱 setType () 和 capabilities ().
把代理主機的主機名設為 hostName .
另請參閱 hostName (), setPort (),和 port ().
把代理身份驗證的口令設為 password .
另請參閱 user (), setUser (),和 password ().
把代理主機的端口設為 port .
另請參閱 hostName (), setHostName (),和 port ().
把此實例的代理類型設為 type .
注意:更改代理類型不會改變設置能力由此 QNetworkProxy 對象保持的,若有設置任何能力采用 setCapabilities ().
另請參閱 type () 和 setCapabilities ().
把代理身份驗證的用戶名設為 user .
另請參閱 user (), setPassword (),和 password ().
返迴此實例的代理類型。
另請參閱 setType ().
返迴用於身份驗證的用戶名。
另請參閱 setUser (), setPassword (),和 password ().
比較此網絡代理的值與 other and returns true if they differ.
該函數在 Qt 4.4 引入。
賦值網絡代理值 other 到此網絡代理。
該函數在 Qt 4.2 引入。
比較此網絡代理的值與 other and returns true if they are equal (same proxy type, server as well as username and password)
該函數在 Qt 4.4 引入。