QNetworkReply¶

PyQt5.QtNetwork.QNetworkReply

Inherits from QIODevice.

Description¶

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. Like QNetworkRequest, it contains a URL and headers (both in parsed and raw form), some information about the reply’s state and the contents of the reply itself.

QNetworkReply is a sequential-access QIODevice, which means that once data is read from the object, it no longer kept by the device. It is therefore the application’s responsibility to keep this data if it needs to. Whenever more data is received from the network and processed, the readyRead() signal is emitted.

The downloadProgress signal is also emitted when data is received, but the number of bytes contained in it may not represent the actual bytes received, if any transformation is done to the contents (for example, decompressing and removing the protocol overhead).

Even though QNetworkReply is a QIODevice connected to the contents of the reply, it also emits the uploadProgress signal, which indicates the progress of the upload for operations that have such content.

Note: Do not delete the object in the slot connected to the error or finished signal. Use deleteLater().

Enums¶

NetworkError

Indicates all possible error conditions found during the processing of the request.

Note: When the HTTP protocol returns a redirect no error will be reported. You can check if there is a redirect with the RedirectionTargetAttribute attribute.

See also

error.

Member

Value

Description

AuthenticationRequiredError

204

the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)

BackgroundRequestNotAllowedError

TODO

the background request is not currently allowed due to platform policy.

ConnectionRefusedError

1

the remote server refused the connection (the server is not accepting requests)

ContentAccessDenied

201

the access to the remote content was denied (similar to HTTP error 403)

ContentConflictError

TODO

the request could not be completed due to a conflict with the current state of the resource.

ContentGoneError

TODO

the requested resource is no longer available at the server.

ContentNotFoundError

203

the remote content was not found at the server (similar to HTTP error 404)

ContentOperationNotPermittedError

202

the operation requested on the remote content is not permitted

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.

HostNotFoundError

3

the remote host name was not found (invalid hostname)

InsecureRedirectError

TODO

while following redirects, the network access API detected a redirect from a encrypted protocol (https) to an unencrypted one (http). (This value was introduced in 5.6.)

InternalServerError

TODO

the server encountered an unexpected condition which prevented it from fulfilling the request.

NetworkSessionFailedError

TODO

the connection was broken due to disconnection from the network or failure to start the network.

NoError

0

no error condition.

OperationCanceledError

5

the operation was canceled via calls to abort() or close() before it was finished.

OperationNotImplementedError

TODO

the server does not support the functionality required to fulfill the request.

ProtocolFailure

399

a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)

ProtocolInvalidOperationError

302

the requested operation is invalid for this protocol

ProtocolUnknownError

301

the Network Access API cannot honor the request because the protocol is not known

ProxyAuthenticationRequiredError

105

the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)

ProxyConnectionClosedError

102

the proxy server closed the connection prematurely, before the entire reply was received and processed

ProxyConnectionRefusedError

101

the connection to the proxy server was refused (the proxy server is not accepting requests)

ProxyNotFoundError

103

the proxy host name was not found (invalid proxy hostname)

ProxyTimeoutError

104

the connection to the proxy timed out or the proxy did not reply in time to the request sent

RemoteHostClosedError

2

the remote server closed the connection prematurely, before the entire reply was received and processed

ServiceUnavailableError

TODO

the server is unable to handle the request at this time.

SslHandshakeFailedError

6

the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors signal should have been emitted.

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.

TimeoutError

4

the connection to the remote server timed out

TooManyRedirectsError

TODO

while following redirects, the maximum limit was reached. The limit is by default set to 50 or as set by QNetworkRequest::setMaxRedirectsAllowed(). (This value was introduced in 5.6.)

UnknownContentError

299

an unknown error related to the remote content was detected

UnknownNetworkError

99

an unknown network-related error was detected

UnknownProxyError

199

an unknown proxy-related error was detected

UnknownServerError

TODO

an unknown error related to the server response was detected

Methods¶

__init__(parent: QObject = None)

Creates a QNetworkReply object with parent parent.

You cannot directly instantiate QNetworkReply objects. Use QNetworkAccessManager functions to do that.


abort()

TODO


attribute(Attribute) → Any

Returns the attribute associated with the code code. If the attribute has not been set, it returns an invalid QVariant (type QMetaType::UnknownType).

You can expect the default values listed in Attribute to be applied to the values returned by this function.


close()

TODO


error() → NetworkError

Returns the error that was found during the processing of this request. If no error was found, returns NoError.

See also

setError().


hasRawHeader(Union[QByteArray, bytes, bytearray]) → bool

Returns true if the raw header of name headerName was sent by the remote server

See also

rawHeader().


Returns the value of the known header header, if that header was sent by the remote server. If the header was not sent, returns an invalid QVariant.


ignoreSslErrors()

If this function is called, SSL errors related to network connection will be ignored, including certificate validation errors.

Warning: Be sure to always let the user inspect the errors reported by the sslErrors signal, and only call this method upon confirmation from the user that proceeding is ok. If there are unexpected errors, the reply should be aborted. Calling this method without inspecting the actual errors will most likely pose a security risk for your application. Use it with great care!

This function can be called from the slot connected to the sslErrors signal, which indicates which errors were found.

Note: If HTTP Strict Transport Security is enabled for QNetworkAccessManager, this function has no effect.


ignoreSslErrors(Iterable[QSslError])

This is an overloaded function.

If this function is called, the SSL errors given in errors will be ignored.

Note: Because most SSL errors are associated with a certificate, for most of them you must set the expected certificate this SSL error is related to. If, for instance, you want to issue a request to a server that uses a self-signed certificate, consider the following snippet:

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

Multiple calls to this function will replace the list of errors that were passed in previous calls. You can clear the list of errors you want to ignore by calling this function with an empty list.

Note: If HTTP Strict Transport Security is enabled for QNetworkAccessManager, this function has no effect.


ignoreSslErrorsImplementation(Iterable[QSslError])

TODO


isFinished() → bool

Returns true when the reply has finished or was aborted.

See also

isRunning().


isRunning() → bool

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

See also

isFinished().


isSequential() → bool

TODO


manager() → QNetworkAccessManager

Returns the QNetworkAccessManager that was used to create this QNetworkReply object. Initially, it is also the parent object.


operation() → Operation

Returns the operation that was posted for this reply.

See also

setOperation().


rawHeader(Union[QByteArray, bytes, bytearray]) → QByteArray

Returns the raw contents of the header headerName as sent by the remote server. If there is no such header, returns an empty byte array, which may be indistinguishable from an empty header. Use hasRawHeader() to verify if the server sent such header field.


rawHeaderList() → List[QByteArray]

Returns a list of headers fields that were sent by the remote server, in the order that they were sent. Duplicate headers are merged together and take place of the latter duplicate.


rawHeaderPairs() → List[Tuple[QByteArray, QByteArray]]

Returns a list of raw header pairs.


readBufferSize() → int

Returns the size of the read buffer, in bytes.


request() → QNetworkRequest

Returns the request that was posted for this reply. In special, note that the URL for the request may be different than that of the reply.

See also

url(), url(), setRequest().


setAttribute(Attribute, Any)

Sets the attribute code to have value value. If code was previously set, it will be overridden. If value is an invalid QVariant, the attribute will be unset.


setError(NetworkError, str)

Sets the error condition to be errorCode. The human-readable message is set with errorString.

Calling does not emit the error(NetworkError) signal.

See also

error, errorString().


setFinished(bool)

Sets the reply as finished.

After having this set the replies data must not change.

See also

finished, isFinished().


setHeader(KnownHeaders, Any)

Sets the known header header to be of value value. The corresponding raw form of the header will be set as well.


setOperation(Operation)

Sets the associated operation for this object to be operation. This value will be returned by operation().

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


setRawHeader(Union[QByteArray, bytes, bytearray], Union[QByteArray, bytes, bytearray])

Sets the raw header headerName to be of value value. If headerName was previously set, it is overridden. Multiple HTTP headers of the same name are functionally equivalent to one single header with the values concatenated, separated by commas.

If headerName matches a known header, the value value will be parsed and the corresponding parsed form will also be set.


setReadBufferSize(int)

Sets the size of the read buffer to be size bytes. The read buffer is the buffer that holds data that is being downloaded off the network, before it is read with read(). Setting the buffer size to 0 will make the buffer unlimited in size.

QNetworkReply will try to stop reading from the network once this buffer is full (i.e., bytesAvailable() returns size or more), thus causing the download to throttle down as well. If the buffer is not limited in size, QNetworkReply will try to download as fast as possible from the network.

Unlike setReadBufferSize(), QNetworkReply cannot guarantee precision in the read buffer size. That is, bytesAvailable() can return more than size.

See also

readBufferSize().


setRequest(QNetworkRequest)

Sets the associated request for this object to be request. This value will be returned by request().

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


setSslConfiguration(QSslConfiguration)

Sets the SSL configuration for the network connection associated with this request, if possible, to be that of config.

See also

sslConfiguration().


setSslConfigurationImplementation(QSslConfiguration)

TODO


setUrl(QUrl)

Sets the URL being processed to be url. Normally, the URL matches that of the request that was posted, but for a variety of reasons it can be different (for example, a file path being made absolute or canonical).

See also

url(), request(), url().


sslConfiguration() → QSslConfiguration

Returns the SSL configuration and state associated with this reply, if SSL was used. It will contain the remote server’s certificate, its certificate chain leading to the Certificate Authority as well as the encryption ciphers in use.

The peer’s certificate and its certificate chain will be known by the time sslErrors is emitted, if it’s emitted.


sslConfigurationImplementation(QSslConfiguration)

TODO


url() → QUrl

Returns the URL of the content downloaded or uploaded. Note that the URL may be different from that of the original request. If the QNetworkRequest::FollowRedirectsAttribute was set in the request, then this function returns the current url that the network API is accessing, i.e the url emitted in the QNetworkReply::redirected signal.

See also

request(), setUrl(), url().


writeData(bytes) → int

TODO

Signals¶

downloadProgress(int, int)

TODO


encrypted()

TODO


error()

Returns the error that was found during the processing of this request. If no error was found, returns NoError.

See also

setError().


error(NetworkError)

Returns the error that was found during the processing of this request. If no error was found, returns NoError.

See also

setError().


finished()

See also

setFinished().


metaDataChanged()

TODO


preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator)

TODO


redirectAllowed()

TODO


redirected(QUrl)

TODO


sslErrors(Iterable[QSslError])

TODO


uploadProgress(int, int)

TODO