QNetworkProxy 類

QNetworkProxy 類提供網絡層代理。 更多...

頭: #include <QNetworkProxy>
qmake: QT += network
Since: Qt 4.1

該類在 Qt 4.1 引入。

注意: 此類的所有函數 可重入 .

公共類型

flags Capabilities
enum Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability }
enum ProxyType { NoProxy, DefaultProxy, Socks5Proxy, HttpProxy, HttpCachingProxy, FtpCachingProxy }

公共函數

QNetworkProxy (const QNetworkProxy & other )
QNetworkProxy (QNetworkProxy::ProxyType type , const QString & hostName = QString(), quint16 port = 0, const QString & user = QString(), const QString & password = QString())
QNetworkProxy ()
QNetworkProxy & operator= (const QNetworkProxy & other )
~QNetworkProxy ()
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 (QNetworkProxy::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
bool operator== (const QNetworkProxy & other ) const

靜態公共成員

QNetworkProxy applicationProxy ()
void setApplicationProxy (const QNetworkProxy & networkProxy )

詳細描述

QNetworkProxy 提供瞭為 Qt Network 類配置網絡層代理支持的方法。目前,支持的類是 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 文檔編製,要小心謹慎在選擇要使用的代理類型之前。

注意: 對目前已連接套接字所做的更改,不會生效。若需要更改已連接套接字,應重新連接它。

SOCKS5

從 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 .

成員類型文檔編製

enum QNetworkProxy:: Capability
flags QNetworkProxy:: Capabilities

這些標誌指示給定代理服務器支持的能力。

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 組閤。

enum QNetworkProxy:: ProxyType

此枚舉描述 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:: QNetworkProxy (const QNetworkProxy & other )

構造副本為 other .

QNetworkProxy:: QNetworkProxy ( QNetworkProxy::ProxyType type , const QString & hostName = QString(), quint16 port = 0, const QString & user = QString(), const QString & password = QString())

構造 QNetworkProxy 采用 type , hostName , port , user and password .

默認能力的代理類型 type 是自動設置的。

另請參閱 capabilities ().

QNetworkProxy:: QNetworkProxy ()

構造 QNetworkProxy 采用 DefaultProxy 類型。

代理類型的確定通過 applicationProxy (),默認為 NoProxy 或係統範圍代理,若配置瞭的話。

另請參閱 setType () 和 setApplicationProxy ().

QNetworkProxy &QNetworkProxy:: operator= (const QNetworkProxy & other )

賦值網絡代理值 other 到此網絡代理。

該函數在 Qt 4.2 引入。

QNetworkProxy:: ~QNetworkProxy ()

銷毀 QNetworkProxy 對象。

[static] QNetworkProxy QNetworkProxy:: applicationProxy ()

返迴應用程序級彆的網絡代理。

QAbstractSocket or QTcpSocket 擁有 QNetworkProxy::DefaultProxy 類型,那麼 QNetworkProxy 被返迴通過使用此函數。

另請參閱 QNetworkProxyFactory , setApplicationProxy (), QAbstractSocket::proxy (),和 QTcpServer::proxy ().

QNetworkProxy::Capabilities QNetworkProxy:: capabilities () const

返迴此代理服務器的能力。

該函數在 Qt 4.5 引入。

另請參閱 setCapabilities () 和 type ().

bool QNetworkProxy:: hasRawHeader (const QByteArray & headerName ) const

返迴 true 若原生 Header (頭) headerName 被用於此代理。返迴 false 若代理不是類型 HttpProxy or HttpCachingProxy .

該函數在 Qt 5.0 引入。

另請參閱 rawHeader () 和 setRawHeader ().

返迴已知網絡 Header (頭) 的值為 header 若被用於此代理。若不存在,返迴 QVariant() (即:無效變體)。

該函數在 Qt 5.0 引入。

另請參閱 QNetworkRequest::KnownHeaders , rawHeader (),和 setHeader ().

QString QNetworkProxy:: hostName () const

返迴代理主機的主機名。

另請參閱 setHostName (), setPort (),和 port ().

bool QNetworkProxy:: isCachingProxy () const

返迴 true 若此代理支持 QNetworkProxy::CachingCapability 能力。

在 Qt 4.4,能力會被捆綁到代理類型,但從 Qt 4.5 起,從代理移除緩存能力是可能的通過調用 setCapabilities ().

該函數在 Qt 4.4 引入。

另請參閱 capabilities (), type (),和 isTransparentProxy ().

bool QNetworkProxy:: isTransparentProxy () const

返迴 true 若此代理支持透明隧道化的 TCP 連接。這匹配 QNetworkProxy::TunnelingCapability 能力。

在 Qt 4.4,能力會被捆綁到代理類型,但從 Qt 4.5 起,從代理移除緩存能力是可能的通過調用 setCapabilities ().

該函數在 Qt 4.4 引入。

另請參閱 capabilities (), type (),和 isCachingProxy ().

QString QNetworkProxy:: password () const

返迴用於身份驗證的口令。

另請參閱 user (), setPassword (),和 setUser ().

quint16 QNetworkProxy:: port () const

返迴代理主機的端口。

另請參閱 setHostName (), setPort (),和 hostName ().

QByteArray QNetworkProxy:: rawHeader (const QByteArray & headerName ) const

返迴 Header (頭) 的原生形式為 headerName 。若不存在這種 Header (頭) 或代理類型不是 HttpProxy or HttpCachingProxy ,空 QByteArray 被返迴,可能難以區分存在但沒有內容的 Header 頭 (使用 hasRawHeader () 以確定 Header 頭是否存在)。

可以設置原生 Header (頭) 采用 setRawHeader () 或采用 setHeader ().

該函數在 Qt 5.0 引入。

另請參閱 header () 和 setRawHeader ().

QList < QByteArray > QNetworkProxy:: rawHeaderList () const

返迴在此網絡代理中設置的所有原生 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 ().

void QNetworkProxy:: setCapabilities ( QNetworkProxy::Capabilities capabilities )

將此代理的能力設為 capabilities .

該函數在 Qt 4.5 引入。

另請參閱 setType () 和 capabilities ().

void QNetworkProxy:: setHeader ( QNetworkRequest::KnownHeaders header , const QVariant & value )

Sets the value of the known header header value ,覆蓋任何先前設置的 Header (頭)。此操作還設置等效原生 HTTP (頭)。

若代理的類型不是 HttpProxy or HttpCachingProxy 這沒有效果。

該函數在 Qt 5.0 引入。

另請參閱 QNetworkRequest::KnownHeaders , setRawHeader (),和 header ().

void QNetworkProxy:: setHostName (const QString & hostName )

把代理主機的主機名設為 hostName .

另請參閱 hostName (), setPort (),和 port ().

void QNetworkProxy:: setPassword (const QString & password )

把代理身份驗證的口令設為 password .

另請參閱 user (), setUser (),和 password ().

void QNetworkProxy:: setPort ( quint16 port )

把代理主機的端口設為 port .

另請參閱 hostName (), setHostName (),和 port ().

void QNetworkProxy:: setRawHeader (const QByteArray & headerName , const QByteArray & headerValue )

設置 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 ().

void QNetworkProxy:: setType ( QNetworkProxy::ProxyType type )

把此實例的代理類型設為 type .

注意:更改代理類型不會改變設置能力由此 QNetworkProxy 對象保持的,若有設置任何能力采用 setCapabilities ().

另請參閱 type () 和 setCapabilities ().

void QNetworkProxy:: setUser (const QString & user )

把代理身份驗證的用戶名設為 user .

另請參閱 user (), setPassword (),和 password ().

void QNetworkProxy:: swap ( QNetworkProxy & other )

交換此網絡代理實例采用 other 。此函數非常快且從不失敗。

該函數在 Qt 5.0 引入。

QNetworkProxy::ProxyType QNetworkProxy:: type () const

返迴此實例的代理類型。

另請參閱 setType ().

QString QNetworkProxy:: user () const

返迴用於身份驗證的用戶名。

另請參閱 setUser (), setPassword (),和 password ().

bool QNetworkProxy:: operator!= (const QNetworkProxy & other ) const

比較此網絡代理的值與 other 並返迴 true 若它們不同。

該函數在 Qt 4.4 引入。

bool QNetworkProxy:: operator== (const QNetworkProxy & other ) const

比較此網絡代理的值與 other 並返迴 true 若它們相等 (相同的代理類型、服務器及用戶名 口令)

該函數在 Qt 4.4 引入。