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
4#ifndef QNETWORKACCESSMANAGER_H
5#define QNETWORKACCESSMANAGER_H
6
7#include <QtNetwork/qtnetworkglobal.h>
8#include <QtNetwork/qnetworkrequest.h>
9#include <QtCore/QString>
10#include <QtCore/QList>
11#include <QtCore/QObject>
12#ifndef QT_NO_SSL
13#include <QtNetwork/QSslConfiguration>
14#include <QtNetwork/QSslPreSharedKeyAuthenticator>
15#endif
16Q_MOC_INCLUDE(<QtNetwork/QSslError>)
17
18QT_BEGIN_NAMESPACE
19
20class QIODevice;
21class QAbstractNetworkCache;
22class QAuthenticator;
23class QByteArray;
24class QNetworkCookie;
25class QNetworkCookieJar;
26class QNetworkReply;
27class QNetworkProxy;
28class QNetworkProxyFactory;
29class QSslError;
30class QHstsPolicy;
31class QHttpMultiPart;
32
33class QNetworkReplyImplPrivate;
34class QNetworkAccessManagerPrivate;
35class Q_NETWORK_EXPORT QNetworkAccessManager: public QObject
36{
37 Q_OBJECT
38
39
40public:
41 enum Operation {
42 HeadOperation = 1,
43 GetOperation,
44 PutOperation,
45 PostOperation,
46 DeleteOperation,
47 CustomOperation,
48
49 UnknownOperation = 0
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, data: 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, data: 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
103#if QT_CONFIG(http) || defined(Q_OS_WASM)
104 QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
105 QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
106 QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart);
107#endif
108
109#ifndef QT_NO_SSL
110 void connectToHostEncrypted(const QString &hostName, quint16 port = 443,
111 const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration());
112 void connectToHostEncrypted(const QString &hostName, quint16 port,
113 const QSslConfiguration &sslConfiguration,
114 const QString &peerName);
115#endif
116 void connectToHost(const QString &hostName, quint16 port = 80);
117
118 void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy);
119 QNetworkRequest::RedirectPolicy redirectPolicy() const;
120
121 bool autoDeleteReplies() const;
122 void setAutoDeleteReplies(bool autoDelete);
123
124 QT_NETWORK_INLINE_SINCE(6, 8)
125 int transferTimeout() const;
126 QT_NETWORK_INLINE_SINCE(6, 8)
127 void setTransferTimeout(int timeout);
128
129 std::chrono::milliseconds transferTimeoutAsDuration() const;
130 void setTransferTimeout(std::chrono::milliseconds duration =
131 QNetworkRequest::DefaultTransferTimeout);
132
133Q_SIGNALS:
134#ifndef QT_NO_NETWORKPROXY
135 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
136#endif
137 void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
138 void finished(QNetworkReply *reply);
139#ifndef QT_NO_SSL
140 void encrypted(QNetworkReply *reply);
141 void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
142 void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator);
143#endif
144
145protected:
146 virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request,
147 QIODevice *outgoingData = nullptr);
148
149protected Q_SLOTS:
150 QStringList supportedSchemesImplementation() const;
151
152private:
153 friend class QNetworkReplyImplPrivate;
154 friend class QNetworkReplyHttpImpl;
155 friend class QNetworkReplyHttpImplPrivate;
156 friend class QNetworkReplyFileImpl;
157
158#ifdef Q_OS_WASM
159 friend class QNetworkReplyWasmImpl;
160#endif
161 Q_DECLARE_PRIVATE(QNetworkAccessManager)
162 Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>))
163#ifndef QT_NO_SSL
164 Q_PRIVATE_SLOT(d_func(), void _q_replyPreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*))
165#endif
166};
167
168#if QT_NETWORK_INLINE_IMPL_SINCE(6, 8)
169int QNetworkAccessManager::transferTimeout() const
170{
171 return int(transferTimeoutAsDuration().count());
172}
173
174void QNetworkAccessManager::setTransferTimeout(int timeout)
175{
176 setTransferTimeout(std::chrono::milliseconds(timeout));
177}
178#endif // INLINE_SINCE 6.8
179
180QT_END_NAMESPACE
181
182#endif
183

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtbase/src/network/access/qnetworkaccessmanager.h