Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qnetworkrequest.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QNETWORKREQUEST_H
6#define QNETWORKREQUEST_H
7
8#include <QtNetwork/qtnetworkglobal.h>
9#include <QtNetwork/qhttpheaders.h>
10#include <QtCore/QSharedDataPointer>
11#include <QtCore/QString>
12#include <QtCore/QUrl>
13#include <QtCore/QVariant>
14
15#include <QtCore/q26numeric.h>
16
17#include <chrono>
18
19QT_BEGIN_NAMESPACE
20
21class QSslConfiguration;
22class QHttp2Configuration;
24
25class QNetworkRequestPrivate;
26class Q_NETWORK_EXPORT QNetworkRequest
27{
28 Q_GADGET
29public:
30 enum KnownHeaders {
31 ContentTypeHeader,
32 ContentLengthHeader,
33 LocationHeader,
34 LastModifiedHeader,
35 CookieHeader,
36 SetCookieHeader,
37 ContentDispositionHeader, // added for QMultipartMessage
38 UserAgentHeader,
39 ServerHeader,
40 IfModifiedSinceHeader,
41 ETagHeader,
42 IfMatchHeader,
43 IfNoneMatchHeader,
44 NumKnownHeaders
45 };
46 Q_ENUM(KnownHeaders)
47
48 enum Attribute {
49 HttpStatusCodeAttribute,
50 HttpReasonPhraseAttribute,
51 RedirectionTargetAttribute,
52 ConnectionEncryptedAttribute,
53 CacheLoadControlAttribute,
54 CacheSaveControlAttribute,
55 SourceIsFromCacheAttribute,
56 DoNotBufferUploadDataAttribute,
57 HttpPipeliningAllowedAttribute,
58 HttpPipeliningWasUsedAttribute,
59 CustomVerbAttribute,
60 CookieLoadControlAttribute,
61 AuthenticationReuseAttribute,
62 CookieSaveControlAttribute,
63 MaximumDownloadBufferSizeAttribute, // internal
64 DownloadBufferAttribute, // internal
65 SynchronousRequestAttribute, // internal
66 BackgroundRequestAttribute,
67 EmitAllUploadProgressSignalsAttribute,
68 Http2AllowedAttribute,
69 Http2WasUsedAttribute,
70 OriginalContentLengthAttribute,
71 RedirectPolicyAttribute,
72 Http2DirectAttribute,
73 ResourceTypeAttribute, // internal
74 AutoDeleteReplyOnFinishAttribute,
75 ConnectionCacheExpiryTimeoutSecondsAttribute,
76 Http2CleartextAllowedAttribute,
77 UseCredentialsAttribute,
78 FullLocalServerNameAttribute,
79
80 User = 1000,
81 UserMax = 32767
82 };
83 enum CacheLoadControl {
84 AlwaysNetwork,
85 PreferNetwork,
86 PreferCache,
87 AlwaysCache
88 };
89 enum LoadControl {
90 Automatic = 0,
91 Manual
92 };
93
94 enum Priority {
95 HighPriority = 1,
96 NormalPriority = 3,
97 LowPriority = 5
98 };
99
100 enum RedirectPolicy {
101 ManualRedirectPolicy,
102 NoLessSafeRedirectPolicy,
103 SameOriginRedirectPolicy,
104 UserVerifiedRedirectPolicy
105 };
106
107 enum TransferTimeoutConstant {
108 DefaultTransferTimeoutConstant = 30000
109 };
110
111 static constexpr auto DefaultTransferTimeout =
112 std::chrono::milliseconds(DefaultTransferTimeoutConstant);
113
114 QNetworkRequest();
115 explicit QNetworkRequest(const QUrl &url);
116 QNetworkRequest(const QNetworkRequest &other);
117 ~QNetworkRequest();
118 QNetworkRequest &operator=(QNetworkRequest &&other) noexcept { swap(other); return *this; }
119 QNetworkRequest &operator=(const QNetworkRequest &other);
120
121 void swap(QNetworkRequest &other) noexcept { d.swap(other.d); }
122
123 bool operator==(const QNetworkRequest &other) const;
124 inline bool operator!=(const QNetworkRequest &other) const
125 { return !operator==(other); }
126
127 QUrl url() const;
128 void setUrl(const QUrl &url);
129
130 QHttpHeaders headers() const;
131 void setHeaders(const QHttpHeaders &newHeaders);
132 void setHeaders(QHttpHeaders &&newHeaders);
133
134 // "cooked" headers
135 QVariant header(KnownHeaders header) const;
136 void setHeader(KnownHeaders header, const QVariant &value);
137
138 // raw headers:
139#if QT_NETWORK_REMOVED_SINCE(6, 7)
140 bool hasRawHeader(const QByteArray &headerName) const;
141#endif
142 bool hasRawHeader(QAnyStringView headerName) const;
143 QList<QByteArray> rawHeaderList() const;
144#if QT_NETWORK_REMOVED_SINCE(6, 7)
145 QByteArray rawHeader(const QByteArray &headerName) const;
146#endif
147 QByteArray rawHeader(QAnyStringView headerName) const;
148 void setRawHeader(const QByteArray &headerName, const QByteArray &value);
149
150 // attributes
151 QVariant attribute(Attribute code, const QVariant &defaultValue = QVariant()) const;
152 void setAttribute(Attribute code, const QVariant &value);
153
154#ifndef QT_NO_SSL
155 QSslConfiguration sslConfiguration() const;
156 void setSslConfiguration(const QSslConfiguration &configuration);
157#endif
158
159 void setOriginatingObject(QObject *object);
160 QObject *originatingObject() const;
161
162 Priority priority() const;
163 void setPriority(Priority priority);
164
165 // HTTP redirect related
166 int maximumRedirectsAllowed() const;
167 void setMaximumRedirectsAllowed(int maximumRedirectsAllowed);
168
169 QString peerVerifyName() const;
170 void setPeerVerifyName(const QString &peerName);
171#if QT_CONFIG(http)
172 QHttp1Configuration http1Configuration() const;
173 void setHttp1Configuration(const QHttp1Configuration &configuration);
174
175 QHttp2Configuration http2Configuration() const;
176 void setHttp2Configuration(const QHttp2Configuration &configuration);
177
178 qint64 decompressedSafetyCheckThreshold() const;
179 void setDecompressedSafetyCheckThreshold(qint64 threshold);
180#endif // QT_CONFIG(http)
181
182#if QT_CONFIG(http) || defined (Q_OS_WASM)
183 QT_NETWORK_INLINE_SINCE(6, 8)
184 int transferTimeout() const;
185 QT_NETWORK_INLINE_SINCE(6, 8)
186 void setTransferTimeout(int timeout);
187
188 std::chrono::milliseconds transferTimeoutAsDuration() const;
189 void setTransferTimeout(std::chrono::milliseconds duration = DefaultTransferTimeout);
190#endif // QT_CONFIG(http) || defined (Q_OS_WASM)
191private:
192 QSharedDataPointer<QNetworkRequestPrivate> d;
193 friend class QNetworkRequestPrivate;
194};
195
197
198#if QT_NETWORK_INLINE_IMPL_SINCE(6, 8)
199#if QT_CONFIG(http) || defined (Q_OS_WASM)
200int QNetworkRequest::transferTimeout() const
201{
202 return q26::saturate_cast<int>(transferTimeoutAsDuration().count());
203}
204
205void QNetworkRequest::setTransferTimeout(int timeout)
206{
207 setTransferTimeout(std::chrono::milliseconds(timeout));
208}
209#endif // QT_CONFIG(http) || defined (Q_OS_WASM)
210#endif // INLINE_SINCE 6.8
211
212QT_END_NAMESPACE
213
214QT_DECL_METATYPE_EXTERN(QNetworkRequest, Q_NETWORK_EXPORT)
215QT_DECL_METATYPE_EXTERN_TAGGED(QNetworkRequest::RedirectPolicy,
216 QNetworkRequest__RedirectPolicy, Q_NETWORK_EXPORT)
217
218#endif
The QAbstractNetworkCache class provides the interface for cache implementations.
\inmodule QtCore\reentrant
Definition qdatastream.h:50
The QHttp1Configuration class controls HTTP/1 parameters and settings.
static void save(QDataStream &out, const QNetworkCacheMetaData &metaData)
bool operator==(const QNetworkCacheMetaDataPrivate &other) const
static void load(QDataStream &in, QNetworkCacheMetaData &metaData)
The QNetworkCacheMetaData class provides cache information.
QByteArray rawHeader(QAnyStringView headerName) const
QHash< QNetworkRequest::Attribute, QVariant > AttributesMap
static std::optional< qint64 > toInt(QByteArrayView value)
static QHttpHeaders fromRawToHttp(const RawHeadersList &raw)
QList< QNetworkCookie > NetworkCookieList
static QByteArray fromCookieList(const NetworkCookieList &cookies)
void setCookedHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
QPointer< QObject > originatingObject
std::pair< QByteArray, QByteArray > RawHeaderPair
QList< QByteArray > rawHeadersKeys() const
static RawHeadersList fromHttpToRaw(const QHttpHeaders &headers)
static std::optional< NetworkCookieList > toCookieList(const QList< QByteArray > &values)
QHttpHeaders headers() const
void setHeaders(QHttpHeaders &&newHeaders)
static std::optional< NetworkCookieList > toSetCookieList(const QList< QByteArray > &values)
void setHeaders(const QHttpHeaders &newHeaders)
const RawHeadersList & allRawHeaders() const
void setRawHeader(const QByteArray &key, const QByteArray &value)
void setHeader(QHttpHeaders::WellKnownHeader name, QByteArrayView value)
QList< RawHeaderPair > RawHeadersList
QHash< QNetworkRequest::KnownHeaders, QVariant > CookedHeadersMap
static QByteArray toHttpDate(const QDateTime &dt)
static QDateTime fromHttpDate(QByteArrayView value)
CookedHeadersMap cookedHeaders
The QNetworkRequest class holds a request to be sent with QNetworkAccessManager.
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)