The QNetworkProxy class provides a network layer proxy. 更多...
| 頭: | #include <QNetworkProxy> |
| qmake: | QT += network |
| Since: | Qt 4.1 |
注意: 此類的所有函數 可重入 .
| flags | Capabilities |
| enum | Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, ..., SctpListeningCapability } |
| 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 |
| bool | hasRawHeader (const QByteArray & headerName ) const |
| QVariant | header (QNetworkRequest::KnownHeaders header ) const |
| QString | hostName () const |
| bool | isCachingProxy () const |
| bool | isTransparentProxy () const |
| QString | password () const |
| quint16 | port () const |
| QByteArray | rawHeader (const QByteArray & headerName ) const |
| QList<QByteArray> | rawHeaderList () const |
| void | setCapabilities (Capabilities capabilities ) |
| void | setHeader (QNetworkRequest::KnownHeaders header , const QVariant & value ) |
| void | setHostName (const QString & hostName ) |
| void | setPassword (const QString & password ) |
| void | setPort (quint16 port ) |
| void | setRawHeader (const QByteArray & headerName , const QByteArray & headerValue ) |
| void | setType (QNetworkProxy::ProxyType type ) |
| void | setUser (const QString & user ) |
| void | swap (QNetworkProxy & other ) |
| QNetworkProxy::ProxyType | type () const |
| QString | user () const |
| bool | operator!= (const QNetworkProxy & other ) const |
| QNetworkProxy & | operator= (QNetworkProxy && other ) |
| 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 and QNetworkAccessManager 。代理支持被設計成盡可能透明。這意味著已編寫的現有啓用網絡的應用程序,應該使用以下代碼自動支持網絡代理。
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 文檔編製,要小心謹慎在選擇要使用的代理類型之前。
注意: 對目前已連接套接字所做的更改,不會生效。若需要更改已連接套接字,應重新連接它。
從 Qt4 起,SOCKS5 的支持是基於 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 地址。 |
QNetworkProxy::SctpTunnelingCapability
|
0x00020
|
能打開到遠程主機的透明、隧道化 SCTP 連接。 |
QNetworkProxy::SctpListeningCapability
|
0x00040
|
能創建監聽套接字並等待來自遠程主機的傳入 SCTP 連接。 |
該枚舉在 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 透明代理 |
QNetworkProxy::HttpCachingProxy
|
4
|
代理僅針對 HTTP 請求 |
QNetworkProxy::FtpCachingProxy
|
5
|
代理僅針對 FTP 請求 |
下錶列齣瞭不同的代理類型及其能力。由於每種代理類型有不同能力,在選取代理類型之前理解它們很重要。
| 代理類型 | 描述 | 默認能力 |
|---|---|---|
| SOCKS 5 | 用於任何連接種類的通用代理。支持 TCP、UDP、綁定到端口 (傳入連接) 及身份驗證。 | TunnelingCapability , ListeningCapability , UdpTunnelingCapability , HostNameLookupCapability |
| HTTP | 使用 CONNECT 命令實現,僅支持傳齣 TCP 連接;支持身份驗證。 | TunnelingCapability , CachingCapability , HostNameLookupCapability |
| 僅緩存 HTTP | 使用正常 HTTP 命令實現,僅在 HTTP 請求上下文中有用 (見 QNetworkAccessManager ) | CachingCapability , HostNameLookupCapability |
| 緩存 FTP | 使用 FTP 代理實現,僅在 FTP 請求上下文中有用 (見 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 ().
返迴
true
若原生 Header (頭)
headerName
被用於此代理。返迴
false
若代理不是類型
HttpProxy
or
HttpCachingProxy
.
該函數在 Qt 5.0 引入。
另請參閱 rawHeader () 和 setRawHeader ().
返迴已知網絡 Header (頭) 的值為 header 若被用於此代理。若不存在,返迴 QVariant() (即:無效變體)。
該函數在 Qt 5.0 引入。
另請參閱 QNetworkRequest::KnownHeaders , rawHeader (),和 setHeader ().
返迴代理主機的主機名。
另請參閱 setHostName (), setPort (),和 port ().
返迴
true
若此代理支持
QNetworkProxy::CachingCapability
能力。
在 Qt 4.4,能力會被捆綁到代理類型,但從 Qt 4.5 起,從代理移除緩存能力是可能的通過調用 setCapabilities ().
該函數在 Qt 4.4 引入。
另請參閱 capabilities (), type (),和 isTransparentProxy ().
返迴
true
若此代理支持透明隧道化的 TCP 連接。這匹配
QNetworkProxy::TunnelingCapability
能力。
在 Qt 4.4,能力會被捆綁到代理類型,但從 Qt 4.5 起,從代理移除緩存能力是可能的通過調用 setCapabilities ().
該函數在 Qt 4.4 引入。
另請參閱 capabilities (), type (),和 isCachingProxy ().
返迴用於身份驗證的口令。
另請參閱 user (), setPassword (),和 setUser ().
返迴代理主機的端口。
另請參閱 setHostName (), setPort (),和 hostName ().
返迴 Header (頭) 的原生形式為 headerName 。若不存在這種 Header (頭) 或代理類型不是 HttpProxy or HttpCachingProxy ,空 QByteArray 被返迴,可能難以區分存在但沒有內容的 Header 頭 (使用 hasRawHeader () 以確定 Header 頭是否存在)。
可以設置原生 Header (頭) 采用 setRawHeader () 或采用 setHeader ().
該函數在 Qt 5.0 引入。
另請參閱 header () 和 setRawHeader ().
返迴在此網絡代理中設置的所有原生 Header (頭) 的列錶。列錶按 Header (頭) 設置次序排列。
若代理的類型不是 HttpProxy or HttpCachingProxy 空 QList 被返迴。
該函數在 Qt 5.0 引入。
另請參閱 hasRawHeader () 和 rawHeader ().
[static]
void
QNetworkProxy::
setApplicationProxy
(const
QNetworkProxy
&
networkProxy
)
把應用程序級彆的網絡代理設為 networkProxy .
若 QAbstractSocket or QTcpSocket 擁有 QNetworkProxy::DefaultProxy 類型,那麼 QNetworkProxy 采用此函數所用設置。若希望在確定使用哪種代理方麵更具靈活性,使用 QNetworkProxyFactory 類。
通過此函數設置的默認代理值將覆蓋應用程序代理工廠設置采用 QNetworkProxyFactory::setApplicationProxyFactory ,並禁用係統代理的使用。
另請參閱 QNetworkProxyFactory , applicationProxy (), QAbstractSocket::setProxy (),和 QTcpServer::setProxy ().
將此代理的能力設為 capabilities .
該函數在 Qt 4.5 引入。
另請參閱 setType () 和 capabilities ().
Sets the value of the known header header 到 value ,覆蓋任何先前設置的 Header (頭)。此操作還設置等效原生 HTTP (頭)。
若代理的類型不是 HttpProxy or HttpCachingProxy 這沒有效果。
該函數在 Qt 5.0 引入。
另請參閱 QNetworkRequest::KnownHeaders , setRawHeader (),和 header ().
把代理主機的主機名設為 hostName .
另請參閱 hostName (), setPort (),和 port ().
把代理身份驗證的口令設為 password .
另請參閱 user (), setUser (),和 password ().
把代理主機的端口設為 port .
另請參閱 hostName (), setHostName (),和 port ().
設置 Header (頭) headerName 到值 headerValue 。若 headerName 對應已知 Header (頭部) (見 QNetworkRequest::KnownHeaders ),原生格式將被剖析,相應 cooked 頭也將被設置。
例如:
request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT"));
還會把已知 LastModifiedHeader 頭設為 QDateTime 剖析日期對象。
注意: 設置相同的頭 2 次覆蓋先前設置。要完成相同名稱多個 HTTP 頭的行為,應采用逗號 , 分隔它們並串聯這 2 個值,然後設置一個原生 Header (頭)。
若代理的類型不是 HttpProxy or HttpCachingProxy 這沒有效果。
該函數在 Qt 5.0 引入。
另請參閱 QNetworkRequest::KnownHeaders , setHeader (), hasRawHeader (),和 rawHeader ().
把此實例的代理類型設為 type .
注意:更改代理類型不會改變設置能力由此 QNetworkProxy 對象保持的,若有設置任何能力采用 setCapabilities ().
另請參閱 type () 和 setCapabilities ().
把代理身份驗證的用戶名設為 user .
另請參閱 user (), setPassword (),和 password ().
交換此網絡代理實例采用 other 。此函數非常快且從不失敗。
該函數在 Qt 5.0 引入。
返迴此實例的代理類型。
另請參閱 setType ().
返迴用於身份驗證的用戶名。
另請參閱 setUser (), setPassword (),和 password ().
比較此網絡代理的值與
other
並返迴
true
若它們不同。
該函數在 Qt 4.4 引入。
移動賦值運算符。
賦值網絡代理值 other 到此網絡代理。
該函數在 Qt 4.2 引入。
比較此網絡代理的值與
other
並返迴
true
若它們相等 (相同的代理類型、服務器及用戶名 口令)
該函數在 Qt 4.4 引入。