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 HeadOperation = 1,
44 GetOperation,
45 PutOperation,
46 PostOperation,
47 DeleteOperation,
48 CustomOperation,
49
50 UnknownOperation = 0
51 };
52
53 explicit QNetworkAccessManager(QObject *parent = nullptr);
54 ~QNetworkAccessManager();
55
56 virtual QStringList supportedSchemes() const;
57
58 void clearAccessCache();
59
60 void clearConnectionCache();
61
62#ifndef QT_NO_NETWORKPROXY
63 QNetworkProxy proxy() const;
64 void setProxy(const QNetworkProxy &proxy);
65 QNetworkProxyFactory *proxyFactory() const;
66 void setProxyFactory(QNetworkProxyFactory *factory);
67#endif
68
69 QAbstractNetworkCache *cache() const;
70 void setCache(QAbstractNetworkCache *cache);
71
72 QNetworkCookieJar *cookieJar() const;
73 void setCookieJar(QNetworkCookieJar *cookieJar);
74
75 void setStrictTransportSecurityEnabled(bool enabled);
76 bool isStrictTransportSecurityEnabled() const;
77 void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString());
78 bool isStrictTransportSecurityStoreEnabled() const;
79 void addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts);
80 QList<QHstsPolicy> strictTransportSecurityHosts() const;
81
82 QNetworkReply *head(const QNetworkRequest &request);
83 QNetworkReply *get(const QNetworkRequest &request);
84 QNetworkReply *get(const QNetworkRequest &request, QIODevice *data);
85 QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data);
86 QNetworkReply *post(const QNetworkRequest &request, QIODevice *data);
87 QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data);
88 QNetworkReply *post(const QNetworkRequest &request, std::nullptr_t)
89 {
90 return post(request, static_cast<QIODevice*>(nullptr));
91 }
92
93 QNetworkReply *put(const QNetworkRequest &request, QIODevice *data);
94 QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data);
95 QNetworkReply *put(const QNetworkRequest &request, std::nullptr_t)
96 {
97 return put(request, static_cast<QIODevice*>(nullptr));
98 }
99
100 QNetworkReply *deleteResource(const QNetworkRequest &request);
101 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr);
102 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data);
103
104#if QT_CONFIG(http) || defined(Q_OS_WASM)
105 QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
106 QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
107 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart);
108#endif
109
110#ifndef QT_NO_SSL
111 void connectToHostEncrypted(const QString &hostName, quint16 port = 443,
112 const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration());
113 void connectToHostEncrypted(const QString &hostName, quint16 port,
114 const QSslConfiguration &sslConfiguration,
115 const QString &peerName);
116#endif
117 void connectToHost(const QString &hostName, quint16 port = 80);
118
119 void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
120 QNetworkRequest::RedirectPolicy redirectPolicy() const;
121
122 bool autoDeleteReplies() const;
123 void setAutoDeleteReplies(bool autoDelete);
124
125 QT_NETWORK_INLINE_SINCE(6, 8)
126 int transferTimeout() const;
127 QT_NETWORK_INLINE_SINCE(6, 8)
128 void setTransferTimeout(int timeout);
129
130 std::chrono::milliseconds transferTimeoutAsDuration() const;
131 void setTransferTimeout(std::chrono::milliseconds duration =
132 QNetworkRequest::DefaultTransferTimeout);
133
134Q_SIGNALS:
135#ifndef QT_NO_NETWORKPROXY
136 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
137#endif
138 void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
139 void finished(QNetworkReply *reply);
140#ifndef QT_NO_SSL
141 void encrypted(QNetworkReply *reply);
142 void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
143 void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator);
144#endif
145
146protected:
147 virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request,
148 QIODevice *outgoingData = nullptr);
149
150protected Q_SLOTS:
151 QStringList supportedSchemesImplementation() const;
152
153private:
154 friend class QNetworkReplyImplPrivate;
155 friend class QNetworkReplyHttpImpl;
156 friend class QNetworkReplyHttpImplPrivate;
157 friend class QNetworkReplyFileImpl;
158
159#ifdef Q_OS_WASM
160 friend class QNetworkReplyWasmImpl;
161#endif
162 Q_DECLARE_PRIVATE(QNetworkAccessManager)
163 Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>))
164#ifndef QT_NO_SSL
165 Q_PRIVATE_SLOT(d_func(), void _q_replyPreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*))
166#endif
167};
168
169#if QT_NETWORK_INLINE_IMPL_SINCE(6, 8)
170int QNetworkAccessManager::transferTimeout() const
171{
172 return int(transferTimeoutAsDuration().count());
173}
174
175void QNetworkAccessManager::setTransferTimeout(int timeout)
176{
177 setTransferTimeout(std::chrono::milliseconds(timeout));
178}
179#endif // INLINE_SINCE 6.8
180
181QT_END_NAMESPACE
182
183#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 *)
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
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)