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
qnetworkaccessmanager.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 QNETWORKACCESSMANAGER_H
6#define QNETWORKACCESSMANAGER_H
7
8#include <QtNetwork/qtnetworkglobal.h>
9#include <QtNetwork/qnetworkrequest.h>
10#include <QtCore/QString>
11#include <QtCore/QList>
12#include <QtCore/QObject>
13#ifndef QT_NO_SSL
14#include <QtNetwork/QSslConfiguration>
15#include <QtNetwork/QSslPreSharedKeyAuthenticator>
16#endif
17Q_MOC_INCLUDE(<QtNetwork/QSslError>)
18
19QT_BEGIN_NAMESPACE
20
21class QIODevice;
22class QAbstractNetworkCache;
23class QAuthenticator;
24class QByteArray;
25class QNetworkCookie;
26class QNetworkCookieJar;
27class QNetworkReply;
28class QNetworkProxy;
29class QNetworkProxyFactory;
30class QSslError;
31class QHstsPolicy;
32class QHttpMultiPart;
33
36class Q_NETWORK_EXPORT QNetworkAccessManager: public QObject
37{
38 Q_OBJECT
39
40
41public:
42 enum Operation {
43 UnknownOperation,
44 HeadOperation,
45 GetOperation,
46 PutOperation,
47 PostOperation,
48 DeleteOperation,
49 CustomOperation,
50 };
51
52 explicit QNetworkAccessManager(QObject *parent = nullptr);
53 ~QNetworkAccessManager();
54
55 virtual QStringList supportedSchemes() const;
56
57 void clearAccessCache();
58
59 void clearConnectionCache();
60
61#ifndef QT_NO_NETWORKPROXY
62 QNetworkProxy proxy() const;
63 void setProxy(const QNetworkProxy &proxy);
64 QNetworkProxyFactory *proxyFactory() const;
65 void setProxyFactory(QNetworkProxyFactory *factory);
66#endif
67
68 QAbstractNetworkCache *cache() const;
69 void setCache(QAbstractNetworkCache *cache);
70
71 QNetworkCookieJar *cookieJar() const;
72 void setCookieJar(QNetworkCookieJar *cookieJar);
73
74 void setStrictTransportSecurityEnabled(bool enabled);
75 bool isStrictTransportSecurityEnabled() const;
76 void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString());
77 bool isStrictTransportSecurityStoreEnabled() const;
78 void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts);
79 QList<QHstsPolicy> strictTransportSecurityHosts() const;
80
81 QNetworkReply *head(const QNetworkRequest &request);
82 QNetworkReply *get(const QNetworkRequest &request);
83 QNetworkReply *get(const QNetworkRequest &request, QIODevice *data);
84 QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data);
85 QNetworkReply *post(const QNetworkRequest &request, QIODevice *data);
86 QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data);
87 QNetworkReply *post(const QNetworkRequest &request, std::nullptr_t)
88 {
89 return post(request, static_cast<QIODevice*>(nullptr));
90 }
91
92 QNetworkReply *put(const QNetworkRequest &request, QIODevice *data);
93 QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data);
94 QNetworkReply *put(const QNetworkRequest &request, std::nullptr_t)
95 {
96 return put(request, static_cast<QIODevice*>(nullptr));
97 }
98
99 QNetworkReply *deleteResource(const QNetworkRequest &request);
100 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr);
101 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data);
102 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, std::nullptr_t)
103 { return sendCustomRequest(request, verb); }
104
105#if QT_CONFIG(http) || defined(Q_OS_WASM)
106 QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
107 QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
108 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart);
109#endif
110
111#ifndef QT_NO_SSL
112 void connectToHostEncrypted(const QString &hostName, quint16 port = 443,
113 const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration());
114 void connectToHostEncrypted(const QString &hostName, quint16 port,
115 const QSslConfiguration &sslConfiguration,
116 const QString &peerName);
117#endif
118 void connectToHost(const QString &hostName, quint16 port = 80);
119
120 void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
121 QNetworkRequest::RedirectPolicy redirectPolicy() const;
122
123 bool autoDeleteReplies() const;
124 void setAutoDeleteReplies(bool autoDelete);
125
126 QT_NETWORK_INLINE_SINCE(6, 8)
127 int transferTimeout() const;
128 QT_NETWORK_INLINE_SINCE(6, 8)
129 void setTransferTimeout(int timeout);
130
131 std::chrono::milliseconds transferTimeoutAsDuration() const;
132 void setTransferTimeout(std::chrono::milliseconds duration =
133 QNetworkRequest::DefaultTransferTimeout);
134
135Q_SIGNALS:
136#ifndef QT_NO_NETWORKPROXY
137 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
138#endif
139 void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
140 void finished(QNetworkReply *reply);
141#ifndef QT_NO_SSL
142 void encrypted(QNetworkReply *reply);
143 void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
144 void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator);
145#endif
146
147protected:
148 virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request,
149 QIODevice *outgoingData = nullptr);
150
151protected Q_SLOTS:
152 QStringList supportedSchemesImplementation() const;
153
154private:
155 friend class QNetworkReplyImplPrivate;
156 friend class QNetworkReplyHttpImpl;
157 friend class QNetworkReplyHttpImplPrivate;
158 friend class QNetworkReplyFileImpl;
159
160#ifdef Q_OS_WASM
161 friend class QNetworkReplyWasmImpl;
162#endif
163 Q_DECLARE_PRIVATE(QNetworkAccessManager)
164 Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>))
165#ifndef QT_NO_SSL
166 Q_PRIVATE_SLOT(d_func(), void _q_replyPreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*))
167#endif
168};
169
170#if QT_NETWORK_INLINE_IMPL_SINCE(6, 8)
171int QNetworkAccessManager::transferTimeout() const
172{
173 return int(transferTimeoutAsDuration().count());
174}
175
176void QNetworkAccessManager::setTransferTimeout(int timeout)
177{
178 setTransferTimeout(std::chrono::milliseconds(timeout));
179}
180#endif // INLINE_SINCE 6.8
181
182QT_END_NAMESPACE
183
184#endif
The QHttp1Configuration class controls HTTP/1 parameters and settings.
void cacheCredentialsSlot(const QHttpNetworkRequest &request, QAuthenticator *authenticator)
QSharedPointer< char > downloadBuffer
QHttpNetworkReply * httpReply
void readBufferSizeChanged(qint64 size)
void synchronousAuthenticationRequiredSlot(const QHttpNetworkRequest &request, QAuthenticator *)
void synchronousFinishedWithErrorSlot(QNetworkReply::NetworkError errorCode, const QString &detail=QString())
void socketStartedConnecting()
std::shared_ptr< QAtomicInt > pendingDownloadData
void sslErrorsSlot(const QList< QSslError > &errors)
QNetworkAccessCachedHttpConnection * httpConnection
void redirected(const QUrl &url, int httpStatus, int maxRedirectsRemainig)
void downloadMetaData(const QHttpHeaders &, int, const QString &, bool, QSharedPointer< char >, qint64, qint64, bool, bool)
void downloadProgress(qint64, qint64)
QHttpNetworkRequest httpRequest
void preSharedKeyAuthenticationRequiredSlot(QSslPreSharedKeyAuthenticator *authenticator)
QHttp1Configuration http1Parameters
void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)
void sslErrors(const QList< QSslError > &, bool *, QList< QSslError > *)
void error(QNetworkReply::NetworkError, const QString &)
void synchronousProxyAuthenticationRequiredSlot(const QNetworkProxy &, QAuthenticator *)
std::optional< qint64 > connectionCacheExpiryTimeoutSeconds
QTcpKeepAliveConfiguration tcpKeepAliveParameters
void finishedWithErrorSlot(QNetworkReply::NetworkError errorCode, const QString &detail=QString())
std::unique_ptr< QSslConfiguration > incomingSslConfiguration
void readBufferFreed(qint64 size)
QHttp2Configuration http2Parameters
static QThreadStorage< QNetworkAccessCache * > connections
std::shared_ptr< QAtomicInt > pendingDownloadProgress
QNetworkReply::NetworkError incomingErrorCode
void downloadData(const QByteArray &)
std::shared_ptr< QNetworkAccessAuthenticationManager > authenticationManager
void dataReadProgressSlot(qint64 done, qint64 total)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *)
void sslConfigurationChanged(const QSslConfiguration &)
void cacheCredentials(const QUrl &url, const QAuthenticator *auth)
QNetworkAuthenticationCredential fetchCachedCredentials(const QUrl &url, const QAuthenticator *auth=nullptr)
Fetch the credential data from the credential cache.
QNetworkAuthenticationCredential fetchCachedProxyCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth=nullptr)
void cacheProxyCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth)
QNetworkAccessCachedHttpConnection(quint16 connectionCount, const QString &hostName, quint16 port, bool encrypt, bool isLocalSocket, QHttpNetworkConnection::ConnectionType connectionType)
The QNetworkAccessManager class allows the application to send network requests and receive replies.
qint64 size() const override
Returns the size of the complete device or -1 if unknown.
bool atEnd() const override
Returns true if everything has been read and the read pointer cannot be advanced anymore.
void processedData(qint64 pos, qint64 amount)
const char * readPointer(qint64 maximumLength, qint64 &len) override
Return a byte pointer for at most maximumLength bytes of that device.
bool advanceReadPointer(qint64 a) override
will advance the internal read pointer by amount bytes.
bool reset() override
Moves the internal read pointer back to the beginning.
\inmodule QtCore
Combined button and popup list for selecting options.
QT_REQUIRE_CONFIG(http)
static QNetworkReply::NetworkError statusCodeFromHttp(int httpStatusCode, const QUrl &url)
static QByteArray makeCacheKey(QUrl &url, QNetworkProxy *proxy, const QString &peerVerifyName)
static QString makeServerErrorString(int code, const QUrl &url, const QString &reasonPhrase)
bool operator<(const QNetworkAuthenticationCredential &t1, const QNetworkAuthenticationCredential &t2)
Q_DECLARE_TYPEINFO(QNetworkAuthenticationCredential, Q_RELOCATABLE_TYPE)