8#include <QtNetwork/private/qnetworkreply_p.h>
9#include <QtNetwork/private/qrestaccessmanager_p.h>
10#include <QtNetwork/private/qtcontenttypeparser_p.h>
12#include <QtCore/qbytearrayview.h>
13#include <QtCore/qjsondocument.h>
14#include <QtCore/qlatin1stringmatcher.h>
15#include <QtCore/qlatin1stringview.h>
16#include <QtCore/qloggingcategory.h>
17#include <QtCore/qstringconverter.h>
19#include <QtCore/qxpfunctional.h>
23using namespace Qt::StringLiterals;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
49
50
55 qCWarning(lcQrest,
"QRestReply: QNetworkReply is nullptr");
59
60
67
68
69
70
71
72
73
74
77
78
79
80
81
82
83
84
87
88
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
115 *error = {0, QJsonParseError::ParseError::NoError};
119 if (!wrapped->isFinished()) {
120 qCWarning(lcQrest,
"readJson() called on an unfinished reply, ignoring");
122 *error = {0, QJsonParseError::ParseError::NoError};
125 QJsonParseError parseError;
127 const QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);
130 if (parseError.error)
136
137
138
139
140
141
142
143
144
147 return wrapped ? wrapped->readAll() : QByteArray{};
151
152
153
154
155
156
157
158
159
160
161
162
163
164
181 const QByteArray charset = QRestReplyPrivate::contentCharset(wrapped);
182 d->decoder.emplace(charset.constData());
183 if (!d->decoder->isValid()) {
184 qCWarning(lcQrest,
"readText(): Charset \"%s\" is not supported", charset.constData());
189 if (d->decoder->hasError() || (result = (*d->decoder)(data), d->decoder->hasError())) {
190 qCWarning(lcQrest,
"readText(): Decoding error occurred");
197
198
199
200
201
202
203
204
205
206
207
208
211 return wrapped ? wrapped->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() : 0;
215
216
217
218
219
220
221
222
223
226
227
228
229
232 const int status = httpStatus();
233 return status >= 200 && status < 300;
237
238
239
240
241
242
243
244
250 const int status = httpStatus();
254 return wrapped->error() == QNetworkReply::RemoteHostClosedError;
256 return wrapped->error() != QNetworkReply::NoError;
260
261
262
263
264
265
269 return QNetworkReply::NetworkError::NoError;
270 return wrapped->error();
274
275
276
277
281 return wrapped->errorString();
291#ifndef QT_NO_DEBUG_STREAM
295 case QNetworkAccessManager::Operation::GetOperation:
297 case QNetworkAccessManager::Operation::HeadOperation:
299 case QNetworkAccessManager::Operation::PostOperation:
301 case QNetworkAccessManager::Operation::PutOperation:
303 case QNetworkAccessManager::Operation::DeleteOperation:
305 case QNetworkAccessManager::Operation::CustomOperation:
307 case QNetworkAccessManager::Operation::UnknownOperation:
310 Q_UNREACHABLE_RETURN({});
314
315
316
317
318
319
322 const QDebugStateSaver saver(debug);
323 debug.resetFormat().nospace();
324 if (!reply.networkReply()) {
325 debug <<
"QRestReply(no network reply)";
328 debug <<
"QRestReply(isSuccess = " << reply.isSuccess()
329 <<
", httpStatus = " << reply.httpStatus()
330 <<
", isHttpStatusSuccess = " << reply.isHttpStatusSuccess()
331 <<
", hasError = " << reply.hasError()
332 <<
", errorString = " << reply.errorString()
333 <<
", error = " << reply.error()
334 <<
", isFinished = " << reply.networkReply()->isFinished()
335 <<
", bytesAvailable = " << reply.networkReply()->bytesAvailable()
336 <<
", url " << reply.networkReply()->url()
337 <<
", operation = " << operationName(reply.networkReply()->operation())
338 <<
", reply headers = " << reply.networkReply()->headers()
356 reply->headers().value(QHttpHeaders::WellKnownHeader::ContentType).toByteArray();
358 const auto r = QtContentTypeParser::parse_content_type(contentTypeValue);
359 if (r && !r.charset.empty())
360 return QByteArrayView(r.charset).toByteArray();
static QByteArray contentCharset(const QNetworkReply *reply)
QRestReply is a convenience wrapper for QNetworkReply.
Q_NETWORK_EXPORT int httpStatus() const
Returns the HTTP status received in the server response.
Q_NETWORK_EXPORT bool isHttpStatusSuccess() const
Returns whether the HTTP status is between 200..299.
Q_NETWORK_EXPORT bool hasError() const
Returns whether an error has occurred.
Q_NETWORK_EXPORT ~QRestReply()
Destroys this QRestReply object.
Combined button and popup list for selecting options.
static QLatin1StringView operationName(QNetworkAccessManager::Operation operation)