QNetworkReply 類

The QNetworkReply class contains the data and headers for a request sent with QNetworkAccessManager 更多...

頭: #include <QNetworkReply>
Since: Qt 4.4
繼承: QIODevice

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

公共類型

enum NetworkError { NoError, ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, ..., ProtocolFailure }
typedef RawHeaderPair

公共函數

~QNetworkReply ()
virtual void abort () = 0
QVariant attribute (QNetworkRequest::Attribute code ) const
NetworkError error () const
bool hasRawHeader (const QByteArray & headerName ) const
QVariant header (QNetworkRequest::KnownHeaders header ) const
void ignoreSslErrors (const QList<QSslError> & errors )
bool isFinished () const
bool isRunning () const
QNetworkAccessManager * manager () const
QNetworkAccessManager::Operation operation () const
QByteArray rawHeader (const QByteArray & headerName ) const
QList<QByteArray> rawHeaderList () const
const QList<RawHeaderPair> & rawHeaderPairs () const
qint64 readBufferSize () const
QNetworkRequest request () const
virtual void setReadBufferSize (qint64 size )
void setSslConfiguration (const QSslConfiguration & config )
QSslConfiguration sslConfiguration () const
QUrl url () const

重實現公共函數

virtual void close ()

公共槽

virtual void ignoreSslErrors ()

信號

void downloadProgress (qint64 bytesReceived , qint64 bytesTotal )
void error (QNetworkReply::NetworkError code )
void finished ()
void metaDataChanged ()
void sslErrors (const QList<QSslError> & errors )
void uploadProgress (qint64 bytesSent , qint64 bytesTotal )

保護函數

QNetworkReply (QObject * parent = 0)
void setAttribute (QNetworkRequest::Attribute code , const QVariant & value )
void setError (NetworkError errorCode , const QString & errorString )
void setFinished (bool finished )
void setHeader (QNetworkRequest::KnownHeaders header , const QVariant & value )
void setOperation (QNetworkAccessManager::Operation operation )
void setRawHeader (const QByteArray & headerName , const QByteArray & value )
void setRequest (const QNetworkRequest & request )
void setUrl (const QUrl & url )

額外繼承成員

詳細描述

The QNetworkReply class contains the data and headers for a request sent with QNetworkAccessManager

The QNetworkReply class contains the data and meta data related to a request posted with QNetworkAccessManager 。像 QNetworkRequest ,它包含 URL 和 Header (兩者的剖析和原生錶單),有關迴復狀態的一些信息及迴復本身的內容。

QNetworkReply is a sequential-access QIODevice ,意味著一旦從對象讀取數據,數據就不再由設備所保持。因此,應用程序有責任保持此數據,若需要的話。每當從網絡接收和處理更多數據時, readyRead () 信號發射。

The downloadProgress () 信號也被發射當接收數據時,但其中包含的字節數可能不錶示實際接收字節數,若有對內容做任何變換 (例如:解壓縮和移除協議開銷)。

Even though QNetworkReply QIODevice 連接到迴復內容,它還發射 uploadProgress () 信號,指示有這種內容操作的上傳進度。

注意: 不要在槽中刪除對象,其已連接到 error () 或 finished () 信號。請使用 deleteLater ().

另請參閱 QNetworkRequest and QNetworkAccessManager .

成員類型文檔編製

enum QNetworkReply:: NetworkError

指示在處理請求期間,發現的所有可能的錯誤條件。

常量 描述
QNetworkReply::NoError 0 沒有錯誤條件。

注意: 當 HTTP 協議返迴重定嚮時,不會報告錯誤。可以校驗是否有重定嚮采用 QNetworkRequest::RedirectionTargetAttribute 屬性。

常量 描述
QNetworkReply::ConnectionRefusedError 1 the remote server refused the connection (the server is not accepting requests)
QNetworkReply::RemoteHostClosedError 2 the remote server closed the connection prematurely, before the entire reply was received and processed
QNetworkReply::HostNotFoundError 3 the remote host name was not found (invalid hostname)
QNetworkReply::TimeoutError 4 the connection to the remote server timed out
QNetworkReply::OperationCanceledError 5 操作被取消經由調用 abort () 或 close () 在它完成之前。
QNetworkReply::SslHandshakeFailedError 6 the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors () signal should have been emitted.
QNetworkReply::TemporaryNetworkFailureError 7 the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.
QNetworkReply::ProxyConnectionRefusedError 101 the connection to the proxy server was refused (the proxy server is not accepting requests)
QNetworkReply::ProxyConnectionClosedError 102 the proxy server closed the connection prematurely, before the entire reply was received and processed
QNetworkReply::ProxyNotFoundError 103 the proxy host name was not found (invalid proxy hostname)
QNetworkReply::ProxyTimeoutError 104 the connection to the proxy timed out or the proxy did not reply in time to the request sent
QNetworkReply::ProxyAuthenticationRequiredError 105 the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)
QNetworkReply::ContentAccessDenied 201 the access to the remote content was denied (similar to HTTP error 401)
QNetworkReply::ContentOperationNotPermittedError 202 the operation requested on the remote content is not permitted
QNetworkReply::ContentNotFoundError 203 the remote content was not found at the server (similar to HTTP error 404)
QNetworkReply::AuthenticationRequiredError 204 the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)
QNetworkReply::ContentReSendError 205 the request needed to be sent again, but this failed for example because the upload data could not be read a second time.
QNetworkReply::ProtocolUnknownError 301 the Network Access API cannot honor the request because the protocol is not known
QNetworkReply::ProtocolInvalidOperationError 302 請求的操作對此協議無效
QNetworkReply::UnknownNetworkError 99 an unknown network-related error was detected
QNetworkReply::UnknownProxyError 199 an unknown proxy-related error was detected
QNetworkReply::UnknownContentError 299 an unknown error related to the remote content was detected
QNetworkReply::ProtocolFailure 399 a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)

另請參閱 error ().

typedef QNetworkReply:: RawHeaderPair

RawHeaderPair 是 QPair < QByteArray , QByteArray > 其中第 1 個 QByteArray 是 Header (頭) 名,而第 2 個是頭。

成員函數文檔編製

[protected] QNetworkReply:: QNetworkReply ( QObject * parent = 0)

創建 QNetworkReply object with parent parent .

You cannot directly instantiate QNetworkReply objects. Use QNetworkAccessManager 函數以做到這點。

QNetworkReply:: ~QNetworkReply ()

處置此迴復並釋放與其關聯的任何資源。若任何網絡連接仍處於打開狀態,它們將被關閉。

另請參閱 abort () 和 close ().

[pure virtual] void QNetworkReply:: abort ()

立即中止操作並關閉所有仍打開的網絡連接。仍在進行中的上傳也將被中止。

另請參閱 close ().

QVariant QNetworkReply:: attribute ( QNetworkRequest::Attribute code ) const

返迴屬性關聯代碼 code 。若尚未設置屬性,則返迴無效 QVariant (type QVariant::Null).

可以期望的默認值列錶於 QNetworkRequest::Attribute 以應用由此函數返迴的值。

另請參閱 setAttribute () 和 QNetworkRequest::Attribute .

[虛擬] void QNetworkReply:: close ()

重實現自 QIODevice::close ().

關閉用於讀取的此設備。未讀取數據會被丟棄,但網絡資源不會被丟棄直到它們完成為止。尤其,若正在進行任何上傳,它將繼續直到完成為止。

The finished () 信號被發射,當所有操作結束,且網絡資源已釋放。

另請參閱 abort () 和 finished ().

[signal] void QNetworkReply:: downloadProgress ( qint64 bytesReceived , qint64 bytesTotal )

此信號被發射,以指示此網絡請求的下載部分的進度 (若有的話)。若沒有與此請求關聯的下載,此信號將發射 0 值一次對於 bytesReceived and bytesTotal .

The bytesReceived 參數指示接收字節數,而 bytesTotal 指示期望要下載的總字節數。若不知道要下載的字節數, bytesTotal 將是 -1。

下載完成當 bytesReceived 等於 bytesTotal 。在那時, bytesTotal 不會是 -1。

注意:值為 bytesReceived and bytesTotal 可能不同於 size (),總字節數的獲取透過 read () 或 readAll (),header(ContentLengthHeader) 值。這樣做的原因是可能有協議開銷或數據壓縮,在下載期間。

另請參閱 uploadProgress () 和 bytesAvailable ().

NetworkError QNetworkReply:: error () const

返迴在此請求處理期間發現的錯誤。若未發現錯誤,返迴 NoError .

另請參閱 setError ().

[signal] void QNetworkReply:: error ( QNetworkReply::NetworkError code )

此信號被發射,當迴復在進行中檢測到錯誤時。 finished () 信號將可能跟隨,指示連接已結束。

The code 參數包含檢測到的錯誤代碼。調用 errorString () 以獲得錯誤條件的正文錶示。

注意: 不要在槽中刪除連接到此信號的對象。使用 deleteLater ().

注意: 信號 error 在此類中是重載。要使用函數指針句法連接到此信號,必須在靜態鑄造中指定信號類型,如此範例所示:

connect(networkReply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
    [=](QNetworkReply::NetworkError code){ /* ... */ });
					

另請參閱 error () 和 errorString ().

[signal] void QNetworkReply:: finished ()

此信號被發射,當迴復處理完成時。在此信號被發射之後,迴復數據 (或元數據) 將不再有更多更新。

除非 close () has been called, the reply will be still be opened for reading, so the data can be retrieved by calls to read () 或 readAll ()。尤其,若不調用 read () 生成結果源於 readyRead (),調用 readAll () 將檢索全部內容按 QByteArray .

此信號串聯發射采用 QNetworkAccessManager::finished () ,其中信號的迴復參數是此對象。

注意: 不要在槽中刪除連接到此信號的對象。使用 deleteLater ().

還可以使用 isFinished () 去校驗,若 QNetworkReply 已完成,甚至在收到 finish() 信號之前。

另請參閱 setFinished (), QNetworkAccessManager::finished (),和 isFinished ().

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

Returns true if the raw header of name headerName 由遠程服務器發送

另請參閱 rawHeader ().

返迴值為已知頭 header ,若 Header (頭) 是由遠程服務器發送的。若未發送頭,則返迴無效 QVariant .

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

[virtual slot] void QNetworkReply:: ignoreSslErrors ()

若此函數被調用,與網絡連接相關的 SSL 錯誤將被忽略,包括證書驗證錯誤。

警告: 確保始終讓用戶審查報告的錯誤通過 sslErrors () 信號,且僅調用此方法 (當用戶確認後繼續進行是 OK 的)。若存在意外錯誤,迴復應被中止。不審查實際錯誤就調用此方法,很可能會給應用程序帶來安全風險。小心使用!

可以調用此函數從槽連接到 sslErrors () 信號,指示發現瞭哪些錯誤。

另請參閱 sslConfiguration (), sslErrors (),和 QSslSocket::ignoreSslErrors ().

void QNetworkReply:: ignoreSslErrors (const QList < QSslError > & errors )

這是重載函數。

若此函數被調用,SSL 錯誤給齣於 errors 將被忽略。

注意: 由於大多數 SSL 錯誤關聯證書,因此對於大多數證書而言,必須設置與此 SSL 錯誤相關的期望證書。例如,若想要嚮使用自簽名證書的服務器發齣請求,考慮以下片段:

QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem"));
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);
QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("https://server.tld/index.html")));
reply->ignoreSslErrors(expectedSslErrors);
// here connect signals etc.
					

多次調用此函數將替換先前調用傳入錯誤列錶。可以清零想要忽略的錯誤列錶通過采用空列錶調用此函數。

該函數在 Qt 4.6 引入。

另請參閱 sslConfiguration (), sslErrors (),和 QSslSocket::ignoreSslErrors ().

bool QNetworkReply:: isFinished () const

Returns true when the reply has finished or was aborted.

該函數在 Qt 4.6 引入。

另請參閱 isRunning ().

bool QNetworkReply:: isRunning () const

Returns true when the request is still processing and the reply has not finished or was aborted yet.

該函數在 Qt 4.6 引入。

另請參閱 isFinished ().

QNetworkAccessManager * QNetworkReply:: manager () const

返迴 QNetworkAccessManager 用於創建此 QNetworkReply 對象。最初,它還是父級對象。

[signal] void QNetworkReply:: metaDataChanged ()

此信號被發射,每當此迴復的元數據改變時。元數據為不是 (數據) 內容本身的任何信息 (包括網絡 Header 頭)。在大多數情況下,元數據將完全已知,在收到第一數據字節時。不管怎樣,接收 Header (頭) 或其它元數據更新是可能的 (在數據處理期間)。

另請參閱 header (), rawHeaderList (), rawHeader (),和 hasRawHeader ().

QNetworkAccessManager::Operation QNetworkReply:: operation () const

返迴此迴復張貼的操作。

另請參閱 setOperation ().

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

返迴原生內容的頭 headerName 由遠程服務器發送。若沒有這種頭,則返迴空字節數組 (可能與空頭難以區分)。使用 hasRawHeader () 去驗證,若服務器發送這種頭字段。

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

QList < QByteArray > QNetworkReply:: rawHeaderList () const

返迴由遠程服務器發送的 Header 字段列錶,按發送順序。重復 Header 被閤並在一起並代替後者。

const QList < RawHeaderPair > & QNetworkReply:: rawHeaderPairs () const

返迴原生頭對的列錶。

qint64 QNetworkReply:: readBufferSize () const

返迴讀取緩衝的尺寸 (以字節為單位)。

另請參閱 setReadBufferSize ().

QNetworkRequest QNetworkReply:: request () const

返迴用於此迴復的張貼請求。特彆注意,請求 URL 可能不同於迴復 URL。

另請參閱 QNetworkRequest::url (), url (),和 setRequest ().

[protected] void QNetworkReply:: setAttribute ( QNetworkRequest::Attribute code , const QVariant & value )

設置屬性 code 到擁有值 value 。若 code 先前有設置,將覆寫它。若 value 是無效 QVariant ,屬性未設置。

另請參閱 attribute () 和 QNetworkRequest::setAttribute ().

[protected] void QNetworkReply:: setError ( NetworkError errorCode , const QString & errorString )

將錯誤條件設為 errorCode 。設置人性化可讀消息采用 errorString .

Calling setError() does not emit the error( QNetworkReply::NetworkError ) 信號。

另請參閱 error () 和 errorString ().

[protected] void QNetworkReply:: setFinished ( bool finished )

把迴復設為 finished .

在此設置之後,迴復數據不得改變。

該函數在 Qt 4.8 引入。

另請參閱 finished () 和 isFinished ().

[protected] void QNetworkReply:: setHeader ( QNetworkRequest::KnownHeaders header , const QVariant & value )

設置已知頭 header 到值 value 。還會設置 Header (頭) 的相應原生形式。

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

[protected] void QNetworkReply:: setOperation ( QNetworkAccessManager::Operation operation )

把此對象的關聯操作設置為 operation 。此值被返迴通過 operation ().

Note: the operation should be set when this object is created and not changed again.

另請參閱 operation () 和 setRequest ().

[protected] void QNetworkReply:: setRawHeader (const QByteArray & headerName , const QByteArray & value )

設置原生頭 headerName 到值 value 。若 headerName 先前有設置,會被覆蓋。相同名稱的多個 HTTP 頭在功能上相當於串聯值的某一單頭,以逗號分隔。

headerName 匹配已知 Header (頭),值 value 將被剖析且還將設置相應剖析形式。

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

[虛擬] void QNetworkReply:: setReadBufferSize ( qint64 size )

將讀取緩衝的大小設為 size 字節。讀取緩衝是保持網絡下載數據的緩衝,在讀取采用 QIODevice::read ()。把緩衝大小設為 0,將使緩衝大小不受限製。

QNetworkReply 將試著停止從網絡讀取,一旦此緩衝已滿 (即, bytesAvailable () 返迴 size 或更多),因此還會導緻下載速度下降。若緩衝大小不受限製, QNetworkReply 將試著從網絡盡可能快下載。

不像 QAbstractSocket::setReadBufferSize (), QNetworkReply 無法保證讀取緩衝大小的精度。即, bytesAvailable () 可以返迴的超齣 size .

另請參閱 readBufferSize ().

[protected] void QNetworkReply:: setRequest (const QNetworkRequest & request )

將此對象的關聯請求設為 request 。此值被返迴通過 request ().

Note: the request should be set when this object is created and not changed again.

另請參閱 request () 和 setOperation ().

void QNetworkReply:: setSslConfiguration (const QSslConfiguration & config )

若可能的話,將此請求關聯的網絡連接的 SSL 配置設為 config .

另請參閱 sslConfiguration ().

[protected] void QNetworkReply:: setUrl (const QUrl & url )

將正在處理的 URL 設為 url 。通常,URL 匹配請求所張貼的 URL,但由於多種原因可能有所不同 (例如:將文件路徑變為絕對路徑或典型路徑)。

另請參閱 url (), request (),和 QNetworkRequest::url ().

QSslConfiguration QNetworkReply:: sslConfiguration () const

返迴此迴復關聯的 SSL 配置和狀態,若有使用 SSL。它將包含遠程服務器證書、通嚮證書頒發機構的證書鏈及在使用中的加密密碼。

對等方的證書及其證書鏈將是已知的,當 sslErrors () 發射,若它被發射。

另請參閱 setSslConfiguration ().

[signal] void QNetworkReply:: sslErrors (const QList < QSslError > & errors )

此信號被發射,若 SSL/TLS 會話在設置期間遇到錯誤 (包括證書驗證錯誤)。 errors 參數包含錯誤列錶。

為指示錯誤不緻命,且連接應繼續進行, ignoreSslErrors () 函數應該被調用,從連接到此信號的槽中。若不調用,SSL 會話將被斷開,在交換任何數據 (包括 URL) 之前。

此信號可用於嚮用戶顯示錯誤消息,指示安全性可能損害並顯示 SSL 設置 (見 sslConfiguration () 以獲得它)。若用戶在分析遠程證書後決定繼續進行,槽應調用 ignoreSslErrors ().

另請參閱 QSslSocket::sslErrors (), QNetworkAccessManager::sslErrors (), sslConfiguration (),和 ignoreSslErrors ().

[signal] void QNetworkReply:: uploadProgress ( qint64 bytesSent , qint64 bytesTotal )

此信號被發射,以指示此網絡請求的上傳部分的進度,若有的話。若沒有上傳關聯此請求,則不會發射此信號。

The bytesSent 參數指示已上傳的字節數,而 bytesTotal 指示要上傳的總字節數。若無法確定要上傳的字節數, bytesTotal 將是 -1。

上傳完成當 bytesSent 等於 bytesTotal 。在那時, bytesTotal 不會是 -1。

另請參閱 downloadProgress ().

QUrl QNetworkReply:: url () const

Returns the URL of the content downloaded or uploaded. Note that the URL may be different from that of the original request.

另請參閱 request (), setUrl (),和 QNetworkRequest::url ().