QNetworkAccessManager Class
Die Klasse „QNetworkAccessManager“ ermöglicht es der Anwendung, Netzwerkanfragen zu senden und Antworten zu empfangen. Mehr...
| Header: | #include <QNetworkAccessManager> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Erbt von: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Elemente
- QNetworkAccessManager ist Teil der Netzwerkprogrammier-API.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Typen
| enum | Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation } |
Öffentliche Funktionen
| QNetworkAccessManager(QObject *parent = nullptr) | |
| virtual | ~QNetworkAccessManager() |
| void | addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts) |
| bool | autoDeleteReplies() const |
| QAbstractNetworkCache * | cache() const |
| void | clearAccessCache() |
| void | clearConnectionCache() |
| void | connectToHost(const QString &hostName, quint16 port = 80) |
| void | connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()) |
| void | connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName) |
| QNetworkCookieJar * | cookieJar() const |
| QNetworkReply * | deleteResource(const QNetworkRequest &request) |
| void | enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()) |
| QNetworkReply * | get(const QNetworkRequest &request) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | head(const QNetworkRequest &request) |
| bool | isStrictTransportSecurityEnabled() const |
| bool | isStrictTransportSecurityStoreEnabled() const |
| QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data) |
(since 6.8) QNetworkReply * | post(const QNetworkRequest &request, std::nullptr_t nptr) |
| QNetworkProxy | proxy() const |
| QNetworkProxyFactory * | proxyFactory() const |
| QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data) |
(since 6.8) QNetworkReply * | put(const QNetworkRequest &request, std::nullptr_t nptr) |
| QNetworkRequest::RedirectPolicy | redirectPolicy() const |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) |
| void | setAutoDeleteReplies(bool shouldAutoDelete) |
| void | setCache(QAbstractNetworkCache *cache) |
| void | setCookieJar(QNetworkCookieJar *cookieJar) |
| void | setProxy(const QNetworkProxy &proxy) |
| void | setProxyFactory(QNetworkProxyFactory *factory) |
| void | setRedirectPolicy(QNetworkRequest::RedirectPolicy policy) |
| void | setStrictTransportSecurityEnabled(bool enabled) |
| void | setTransferTimeout(int timeout) |
(since 6.7) void | setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout) |
| QList<QHstsPolicy> | strictTransportSecurityHosts() const |
| virtual QStringList | supportedSchemes() const |
| int | transferTimeout() const |
(since 6.7) std::chrono::milliseconds | transferTimeoutAsDuration() const |
Signale
| void | authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator) |
| void | encrypted(QNetworkReply *reply) |
| void | finished(QNetworkReply *reply) |
| void | preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator) |
| void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | sslErrors(QNetworkReply *reply, const QList<QSslError> &errors) |
Geschützte Funktionen
| virtual QNetworkReply * | createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr) |
Ausführliche Beschreibung
Die Netzwerkzugriffs-API basiert auf einem QNetworkAccessManager-Objekt, das die allgemeinen Konfigurationen und Einstellungen für die von ihm gesendeten Anfragen enthält. Es umfasst die Proxy- und Cache-Konfiguration sowie die damit verbundenen Signale und Antwortsignale, mit denen der Fortschritt eines Netzwerkvorgangs überwacht werden kann. Eine Instanz von `QNetworkAccessManager` sollte für die gesamte Qt-Anwendung ausreichen. Da `QNetworkAccessManager` auf ` QObject` basiert, kann es nur von dem Thread aus verwendet werden, zu dem es gehört.
Sobald ein QNetworkAccessManager-Objekt erstellt wurde, kann die Anwendung es verwenden, um Anfragen über das Netzwerk zu senden. Es steht eine Gruppe von Standardfunktionen zur Verfügung, die eine Anfrage und optionale Daten entgegennehmen und jeweils ein QNetworkReply -Objekt zurückgeben. Das zurückgegebene Objekt wird verwendet, um alle Daten abzurufen, die als Antwort auf die entsprechende Anfrage zurückgegeben werden.
Ein einfacher Download aus dem Netzwerk könnte wie folgt durchgeführt werden:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));QNetworkAccessManager verfügt über eine asynchrone API. Wenn der oben genannte Slot „ replyFinished “ aufgerufen wird, ist der übergebene Parameter das „ QNetworkReply “-Objekt, das sowohl die heruntergeladenen Daten als auch Metadaten (Header usw.) enthält.
Hinweis: Nach Abschluss der Anfrage ist es Aufgabe des Benutzers, das ` QNetworkReply `-Objekt zu einem geeigneten Zeitpunkt zu löschen. Löschen Sie es nicht direkt innerhalb des mit ` finished()` verbundenen Slots. Verwenden Sie dazu die Funktion ` deleteLater()`.
Hinweis: QNetworkAccessManager stellt die empfangenen Anfragen in eine Warteschlange. Die Anzahl der parallel ausgeführten Anfragen hängt vom Protokoll ab. Derzeit werden für das HTTP-Protokoll auf Desktop-Plattformen 6 Anfragen parallel für eine Host/Port-Kombination ausgeführt.
Hinweis: Der QNetworkAccessManager verarbeitet Abschnitt 8.2.2 von RFC 2616 nicht korrekt, da er erst auf eingehende Daten reagiert, wenn der Schreibvorgang abgeschlossen ist. So wird beispielsweise der Upload einer großen Datei nicht gestoppt, selbst wenn der Server einen Statuscode zurückgibt, der den Client anweist, den Vorgang nicht fortzusetzen.
Ein komplexeres Beispiel, unter der Annahme, dass der Manager bereits vorhanden ist, könnte wie folgt aussehen:
QNetworkRequest request;
request.setUrl(QUrl("http://qt-project.org"));
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
QNetworkReply *reply = manager->get(request);
connect(reply, &QIODevice::readyRead, this, &MyClass::slotReadyRead);
connect(reply, &QNetworkReply::errorOccurred,
this, &MyClass::slotError);
connect(reply, &QNetworkReply::sslErrors,
this, &MyClass::slotSslErrors);Seit Qt 6.11 wurden die Standardwerte der von QNetworkAccessManager verwendeten TCP-Keepalive-Parameter geändert. Mit den aktuellen Einstellungen wird die Verbindung nach 2 Minuten Inaktivität beendet.
Diese Einstellungen können für einzelne Anfragen über die ` QNetworkRequest `-API geändert werden, um sie großzügiger oder sogar strenger zu gestalten.
QNetworkRequest networkRequest(url);
networkRequest.setTcpKeepAliveIdleTimeBeforeProbes(20s);
networkRequest.setTcpKeepAliveIntervalBetweenProbes(2s);
networkRequest.setTcpKeepAliveProbeCount(5);Im obigen Codeausschnitt wählen wir eine aggressivere Strategie, um die Verbindung nach dreißig Sekunden Inaktivität zu beenden. Dies kann beispielsweise bei der frühzeitigen Erkennung von Netzwerk-Hängern nützlich sein, die durch Netzwerkänderungen unter Linux verursacht werden.
Siehe auch QNetworkRequest, QNetworkReply und QNetworkProxy.
Dokumentation zu Mitgliedstypen
enum QNetworkAccessManager::Operation
Gibt den Vorgang an, den diese Antwort gerade verarbeitet.
| Konstante | Wert | Beschreibung |
|---|---|---|
QNetworkAccessManager::HeadOperation | 1 | Vorgang zum Abrufen der Kopfzeilen (erstellt mit ` head()`) |
QNetworkAccessManager::GetOperation | 2 | Vorgang zum Abrufen von Kopfzeilen und Herunterladen von Inhalten (erstellt mit get()) |
QNetworkAccessManager::PutOperation | 3 | Vorgang zum Hochladen von Inhalten (erstellt mit ` put()`) |
QNetworkAccessManager::PostOperation | 4 | Inhalte eines HTML-Formulars zur Verarbeitung per HTTP-POST senden (erstellt mit ` post()))` |
QNetworkAccessManager::DeleteOperation | 5 | Vorgang zum Löschen von Inhalten (erstellt mit deleteResource()) |
QNetworkAccessManager::CustomOperation | 6 | Benutzerdefinierte Operation (erstellt mit sendCustomRequest()) |
Siehe auch QNetworkReply::operation().
Dokumentation zu den Member-Funktionen
[explicit] QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)
Erstellt ein `QNetworkAccessManager`-Objekt, das das Herzstück der Netzwerkzugriffs-API bildet, und legt ` parent ` als übergeordnetes Objekt fest.
[virtual noexcept] QNetworkAccessManager::~QNetworkAccessManager()
Löscht das „ QNetworkAccessManager “-Objekt und gibt alle Ressourcen frei. Beachten Sie, dass Objekte vom Typ „ QNetworkReply “, die von dieser Klasse zurückgegeben werden, dieses Objekt als übergeordnetes Objekt haben. Das bedeutet, dass sie zusammen mit diesem gelöscht werden, wenn Sie für sie nicht die Methode „ QObject::setParent()“ aufrufen.
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
Fügt HTTP-Strict-Transport-Security-Richtlinien in den HSTS-Cache ein. Die Datei „ knownHosts “ enthält die bekannten Hosts, für die Informationen zu „ QHstsPolicy “ vorliegen.
Hinweis: Eine abgelaufene Richtlinie entfernt einen bekannten Host aus dem Cache, sofern dieser zuvor vorhanden war.
Hinweis: Bei der Verarbeitung von HTTP-Antworten kann „ QNetworkAccessManager “ auch den HSTS-Cache aktualisieren, indem bestehende Richtlinien entfernt oder aktualisiert bzw. neue „ knownHosts “ hinzugefügt werden. Die aktuelle Implementierung ist somit serverseitig gesteuert; Client-Code kann „ QNetworkAccessManager “ mit zuvor bekannten oder entdeckten Richtlinien versorgen, doch diese Informationen können durch „Strict-Transport-Security“-Antwortheader überschrieben werden.
Siehe auch strictTransportSecurityHosts(), enableStrictTransportSecurityStore() und QHstsPolicy.
[signal] void QNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
Dieses Signal wird immer dann ausgelöst, wenn ein Endserver eine Authentifizierung anfordert, bevor er die angeforderten Inhalte bereitstellt. Der mit diesem Signal verbundene Slot sollte die Anmeldedaten für die Inhalte (die durch Überprüfung des Objekts ` reply ` ermittelt werden können) in das Objekt ` authenticator ` eintragen.
QNetworkAccessManager speichert die Anmeldedaten intern im Cache und sendet dieselben Werte, wenn der Server erneut eine Authentifizierung verlangt, ohne das Signal `authenticationRequired()` auszulösen. Wenn die Anmeldedaten abgelehnt werden, wird dieses Signal erneut ausgelöst.
Hinweis: Damit die Anfrage keine Anmeldedaten sendet, dürfen Sie die Methoden `setUser()` oder `setPassword()` nicht auf dem Objekt ` authenticator ` aufrufen. Dies führt dazu, dass das Signal ` finished()` mit einem ` QNetworkReply ` und dem Fehler ` AuthenticationRequiredError` ausgelöst wird.
Hinweis: Es ist nicht möglich, eine `QueuedConnection` für die Verbindung mit diesem Signal zu verwenden, da die Verbindung fehlschlägt, wenn der Authentifikator bei der Rückgabe des Signals nicht mit neuen Informationen gefüllt wurde.
Siehe auch proxyAuthenticationRequired(), QAuthenticator::setUser() und QAuthenticator::setPassword().
bool QNetworkAccessManager::autoDeleteReplies() const
Gibt „true“ zurück, wenn „ QNetworkAccessManager “ derzeit so konfiguriert ist, dass „QNetworkReplies“ automatisch gelöscht werden; andernfalls „false“.
Siehe auch „ setAutoDeleteReplies “ und „ QNetworkRequest::AutoDeleteReplyOnFinishAttribute “.
QAbstractNetworkCache *QNetworkAccessManager::cache() const
Gibt den Cache zurück, der zum Speichern von aus dem Netzwerk bezogenen Daten verwendet wird.
Siehe auch ` setCache()`.
void QNetworkAccessManager::clearAccessCache()
Leert den internen Cache mit Authentifizierungsdaten und Netzwerkverbindungen.
Diese Funktion ist nützlich für die Durchführung von automatisierten Tests.
Siehe auch ` clearConnectionCache()`.
void QNetworkAccessManager::clearConnectionCache()
Leert den internen Cache der Netzwerkverbindungen. Im Gegensatz zu clearAccessCache() bleiben die Authentifizierungsdaten erhalten.
Siehe auch ` clearAccessCache()`.
void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)
Stellt eine Verbindung zu dem unter hostName angegebenen Host am Port port her. Diese Funktion ist nützlich, um den TCP-Handshake mit einem Host abzuschließen, bevor die HTTP-Anfrage gesendet wird, was zu einer geringeren Netzwerklatenz führt.
Hinweis: Diese Funktion bietet keine Möglichkeit, Fehler zu melden.
Siehe auch connectToHostEncrypted(), get(), post(), put() und deleteResource().
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
Stellt eine Verbindung zu dem unter hostName angegebenen Host am Port port her, wobei sslConfiguration verwendet wird. Diese Funktion ist nützlich, um den TCP- und SSL-Handshake mit einem Host abzuschließen, bevor die HTTPS-Anfrage gestellt wird, was zu einer geringeren Netzwerklatenz führt.
Hinweis: Eine HTTP/2-Verbindung kannvorab hergestellt werden, indem setAllowedNextProtocols() für sslConfiguration aufgerufen wird, wobei QSslConfiguration::ALPNProtocolHTTP2 in der Liste der zugelassenen Protokolle enthalten sein muss. Bei Verwendung von HTTP/2 reicht eine einzige Verbindung pro Host aus, d. h. ein mehrmaliger Aufruf dieser Methode pro Host führt nicht zu schnelleren Netzwerktransaktionen.
Hinweis: Diese Funktion bietet keine Möglichkeit, Fehler zu melden.
Siehe auch connectToHost(), get(), post(), put() und deleteResource().
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
Stellt eine Verbindung zu dem unter hostName angegebenen Host am Port port her, wobei sslConfiguration verwendet wird und peerName als Hostname für die Zertifikatsvalidierung festgelegt ist. Diese Funktion ist nützlich, um den TCP- und SSL-Handshake mit einem Host abzuschließen, bevor die HTTPS-Anfrage gestellt wird, was zu einer geringeren Netzwerklatenz führt.
Hinweis: Das Vorherstellen einer HTTP/2-Verbindung kann durch den Aufruf von `setAllowedNextProtocols()` auf ` sslConfiguration ` erfolgen, wobei ` QSslConfiguration::ALPNProtocolHTTP2 ` in der Liste der zulässigen Protokolle enthalten sein muss. Bei Verwendung von HTTP/2 reicht eine einzige Verbindung pro Host aus, d. h., ein mehrfacher Aufruf dieser Methode pro Host führt nicht zu schnelleren Netzwerktransaktionen.
Hinweis: Diese Funktion bietet keine Möglichkeit, Fehler zu melden.
Dies ist eine überladene Funktion.
Siehe auch connectToHost(), get(), post(), put() und deleteResource().
QNetworkCookieJar *QNetworkAccessManager::cookieJar() const
Gibt das „ QNetworkCookieJar “ zurück, in dem sowohl aus dem Netzwerk bezogene Cookies als auch Cookies, die versendet werden sollen, gespeichert werden.
Siehe auch setCookieJar().
[virtual protected] QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)
Gibt ein neues „ QNetworkReply “-Objekt zurück, um die Operation „ op “ und die Anfrage „ originalReq “ zu verarbeiten. Der Parameter „device“ outgoingData ist bei GET- und HEAD-Anfragen immer 0, wird jedoch bei diesen Operationen als Wert an die Methoden „ post()“ und „ put()“ übergeben (die „ QByteArray “-Varianten übergeben ein „ QBuffer “-Objekt).
Die Standardimplementierung ruft ` QNetworkCookieJar::cookiesForUrl()` für den mit ` setCookieJar()` eingerichteten Cookie-Speicher auf, um die an den Remote-Server zu sendenden Cookies abzurufen.
Das zurückgegebene Objekt muss sich im geöffneten Zustand befinden.
QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)
Sendet eine Anforderung zum Löschen der Ressource, die durch die URL request identifiziert wird.
Hinweis: Diese Funktion ist derzeit nur für HTTP verfügbar und führt eine HTTP-DELETE-Anfrage durch.
Siehe auch get(), post(), put() und sendCustomRequest().
void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
Wenn „ enabled “ auf „ true “ gesetzt ist, nutzt der interne HSTS-Cache einen persistenten Speicher zum Lesen und Schreiben von HSTS-Richtlinien. „ storeDir “ legt fest, wo sich dieser Speicher befindet. Der Standardspeicherort wird durch „ QStandardPaths::CacheLocation “ definiert. Wenn kein beschreibbarer „QStandartPaths::CacheLocation“-Pfad vorhanden ist und „ storeDir “ eine leere Zeichenkette ist, befindet sich der Speicher im Arbeitsverzeichnis des Programms.
Hinweis: Wenn der HSTS-Cache zum Zeitpunkt der Aktivierung des persistenten Speichers bereits HSTS-Richtlinien enthält, bleiben diese Richtlinien im Speicher erhalten. Falls sowohl der Cache als auch der Speicher dieselben bekannten Hosts enthalten, gelten die Richtlinien aus dem Cache als aktueller (und überschreiben somit die bisherigen Werte im Speicher). Sollte dieses Verhalten unerwünscht sein, aktivieren Sie den HSTS-Speicher, bevor Sie „Strict Transport Security“ aktivieren. Standardmäßig ist der persistente Speicher für HSTS-Richtlinien deaktiviert.
Hinweis: Der HSTS-Speicher speichert Richtlinien mithilfe von „ QSettings “ im INI-Format ohne Verschlüsselung oder Integritätsschutz auf der Festplatte. Der Speicher gibt Aufschluss darüber, mit welchen Hosts die Anwendung über HTTPS kommuniziert hat, da für jeden Host, der einen „Strict-Transport-Security“-Header sendet, ein HSTS-Eintrag erfasst wird. In datenschutzrelevanten Anwendungen sollte dieser Verbindungsverlauf als vertrauliche Daten behandelt werden.
Ein Angreifer mit Schreibzugriff auf die Speicher-Datei könnte HSTS-Einträge für bestimmte Domänen entfernen, was dazu führen würde, dass die Anwendung bei nachfolgenden Anfragen HTTP-Verbindungen im Klartext zu diesen Domänen zulässt und potenziell SSL-Stripping-Angriffe ermöglicht. Anwendungen, die auf HSTS angewiesen sind, sollten sicherstellen, dass das Speicherverzeichnis durch geeignete Dateisystemberechtigungen geschützt ist.
Siehe auch isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled() und QStandardPaths::standardLocations().
[signal] void QNetworkAccessManager::encrypted(QNetworkReply *reply)
Dieses Signal wird ausgegeben, wenn eine SSL/TLS-Sitzung den anfänglichen Handshake erfolgreich abgeschlossen hat. Zu diesem Zeitpunkt wurden noch keine Benutzerdaten übertragen. Das Signal kann verwendet werden, um zusätzliche Prüfungen der Zertifikatskette durchzuführen, beispielsweise um Benutzer zu benachrichtigen, wenn sich das Zertifikat einer Website geändert hat. Der Parameter ` reply ` gibt an, welche Netzwerkantwort dafür verantwortlich ist. Entspricht die Antwort nicht den erwarteten Kriterien, sollte sie durch den Aufruf von ` QNetworkReply::abort()` durch einen mit diesem Signal verbundenen Slot abgebrochen werden. Die verwendete SSL-Konfiguration kann mit der Methode ` QNetworkReply::sslConfiguration()` überprüft werden.
Intern kann ` QNetworkAccessManager ` mehrere Verbindungen zu einem Server öffnen, um Anfragen parallel verarbeiten zu können. Diese Verbindungen können wiederverwendet werden, was bedeutet, dass das Signal `encrypted()` nicht ausgelöst wird. Das bedeutet, dass Sie dieses Signal garantiert nur für die erste Verbindung zu einer Website während der Lebensdauer von ` QNetworkAccessManager` erhalten.
Siehe auch ` QSslSocket::encrypted()` und ` QNetworkReply::encrypted()`.
[signal] void QNetworkAccessManager::finished(QNetworkReply *reply)
Dieses Signal wird ausgelöst, sobald eine ausstehende Netzwerkantwort abgeschlossen ist. Der Parameter „ reply “ enthält einen Zeiger auf die soeben abgeschlossene Antwort. Dieses Signal wird zusammen mit dem Signal „ QNetworkReply::finished()“ ausgelöst.
Informationen zum Status, in dem sich das Objekt befinden wird, finden Sie unter „ QNetworkReply::finished()“.
Hinweis: LöschenSie das „ reply “-Objekt nicht in dem mit diesem Signal verbundenen Slot. Verwenden Sie stattdessen „ deleteLater()“.
Siehe auch QNetworkReply::finished() und QNetworkReply::error().
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
Sendet eine Anfrage, um den Inhalt der Ziel- request abzurufen, und gibt ein neues, zum Lesen geöffnetes „ QNetworkReply “-Objekt zurück, das bei jedem Eintreffen neuer Daten das Signal „ readyRead()“ ausgibt.
Sowohl der Inhalt als auch die zugehörigen Header werden heruntergeladen.
Siehe auch „ post()“, „ put()“, „ deleteResource()“ und „ sendCustomRequest()“.
[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, QIODevice *data)
Hinweis: Eine GET-Anfrage mit einem Nachrichtenkörper wird nicht zwischengespeichert.
Hinweis: Wird die Anfrage umgeleitet, bleibt der Nachrichtenkörper nur erhalten, wenn der Statuscode 308 lautet.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 eingeführt.
[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, const QByteArray &data)
Hinweis: Eine GET-Anfrage mit einem Nachrichtenkörper wird nicht zwischengespeichert.
Hinweis: Wird die Anfrage umgeleitet, bleibt der Nachrichtenkörper nur erhalten, wenn der Statuscode 308 lautet.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 eingeführt.
QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request)
Sendet eine Anfrage, um die Netzwerk-Header für request abzurufen, und gibt ein neues QNetworkReply -Objekt zurück, das diese Header enthält.
Die Funktion ist nach der zugehörigen HTTP-Anfrage (HEAD) benannt.
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
Gibt „true“ zurück, wenn HTTP Strict Transport Security (HSTS) aktiviert wurde. Standardmäßig ist HSTS deaktiviert.
Siehe auch „ setStrictTransportSecurityEnabled()“.
bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
Gibt „true“ zurück, wenn der HSTS-Cache einen permanenten Speicher zum Laden und Speichern von HSTS-Richtlinien verwendet.
Siehe auch ` enableStrictTransportSecurityStore()`.
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODevice *data)
Sendet eine HTTP-POST-Anfrage an das unter request angegebene Ziel und gibt ein neues, zum Lesen geöffnetes QNetworkReply -Objekt zurück, das die vom Server gesendete Antwort enthält. Der Inhalt des Geräts data wird auf den Server hochgeladen.
data muss zum Lesen geöffnet sein und muss gültig bleiben, bis das Signal ` finished()` für diese Antwort ausgelöst wird.
Hinweis: Das Senden einer POST-Anfrage über andere Protokolle als HTTP und HTTPS ist nicht definiert und schlägt wahrscheinlich fehl.
Siehe auch „ get()“, „ put()“, „ deleteResource()“ und „ sendCustomRequest()“.
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
Sendet den Inhalt der Nachricht „ multiPart “ an das unter „ request “ angegebene Ziel.
Dies kann zum Versenden von MIME-Multipart-Nachrichten über HTTP verwendet werden.
Dies ist eine überladene Funktion.
Siehe auch QHttpMultiPart, QHttpPart und put().
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data)
Sendet den Inhalt des Byte-Arrays „ data “ an das durch „ request “ angegebene Ziel.
Dies ist eine überladene Funktion.
[since 6.8] QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, std::nullptr_t nptr)
Sendet die unter request angegebene POST-Anfrage ohne Body und gibt ein neues QNetworkReply -Objekt zurück.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.8 eingeführt.
[signal] void QNetworkAccessManager::preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
Dieses Signal wird ausgegeben, wenn beim SSL/TLS-Handshake eine PSK-Verschlüsselungssuite ausgehandelt wird und daher anschließend eine PSK-Authentifizierung erforderlich ist. Das „ reply “-Objekt ist der „ QNetworkReply “, der solche Verschlüsselungssuiten aushandelt.
Bei Verwendung von PSK muss der Client dem Server eine gültige Identität und einen gültigen vorab geteilten Schlüssel senden, damit der SSL-Handshake fortgesetzt werden kann. Anwendungen können diese Informationen in einem mit diesem Signal verbundenen Slot bereitstellen, indem sie das übergebene „ authenticator “-Objekt entsprechend ihren Anforderungen ausfüllen.
Hinweis: Wird dieses Signalignoriert oder werden die erforderlichen Anmeldedaten nicht bereitgestellt, schlägt der Handshake fehl und die Verbindung wird abgebrochen.
Hinweis: Das ` authenticator `-Objekt gehört der Antwort und darf von der Anwendung nicht gelöscht werden.
Siehe auch „ QSslPreSharedKeyAuthenticator “.
QNetworkProxy QNetworkAccessManager::proxy() const
Gibt den „ QNetworkProxy “ zurück, den die mit diesem „ QNetworkAccessManager “-Objekt gesendeten Anfragen verwenden werden. Der Standardwert für den Proxy lautet QNetworkProxy::DefaultProxy.
Siehe auch setProxy(), setProxyFactory() und proxyAuthenticationRequired().
[signal] void QNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
Dieses Signal wird immer dann ausgegeben, wenn ein Proxy eine Authentifizierung anfordert und „ QNetworkAccessManager “ keine gültigen, zwischengespeicherten Anmeldedaten finden kann. Der mit diesem Signal verbundene Slot sollte die Anmeldedaten für den Proxy „ proxy “ im Objekt „ authenticator “ eintragen.
QNetworkAccessManager QNetworkAccessManager speichert die Anmeldedaten intern im Cache. Wenn der Proxy das nächste Mal eine Authentifizierung anfordert, sendet automatisch dieselben Anmeldedaten, ohne das Signal „proxyAuthenticationRequired“ erneut auszulösen.
Wenn der Proxy die Anmeldedaten ablehnt, sendet „ QNetworkAccessManager “ das Signal erneut aus.
Siehe auch „ proxy()“, „ setProxy()“ und „ authenticationRequired()“.
QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const
Gibt die Proxy-Factory zurück, die dieses „ QNetworkAccessManager “-Objekt verwendet, um die für Anfragen zu verwendenden Proxys zu ermitteln.
Beachten Sie, dass der von dieser Funktion zurückgegebene Zeiger von ` QNetworkAccessManager ` verwaltet wird und jederzeit gelöscht werden könnte.
Siehe auch „ setProxyFactory()“ und „ proxy()“.
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)
Lädt den Inhalt von data an die Zieladresse request hoch und gibt ein neues QNetworkReply -Objekt zurück, das für die Antwort geöffnet ist.
data muss beim Aufruf dieser Funktion zum Lesen geöffnet sein und muss gültig bleiben, bis das Signal ` finished()` für diese Antwort ausgegeben wird.
Ob aus dem zurückgegebenen Objekt Daten gelesen werden können, hängt vom jeweiligen Protokoll ab. Bei HTTP sendet der Server möglicherweise eine kleine HTML-Seite, die angibt, ob der Upload erfolgreich war (oder nicht). Andere Protokolle enthalten in ihren Antworten wahrscheinlich Inhalte.
Hinweis: Bei HTTP sendet diese Anfrage eine PUT-Anfrage, was die meisten Server nicht zulassen. Mechanismen zum Hochladen über Formulare, einschließlich des Hochladens von Dateien über HTML-Formulare, verwenden den POST-Mechanismus.
Siehe auch get(), post(), deleteResource() und sendCustomRequest().
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
Sendet den Inhalt der Nachricht „ multiPart “ an das unter „ request “ angegebene Ziel.
Dies kann zum Versenden von MIME-Multipart-Nachrichten über HTTP verwendet werden.
Dies ist eine überladene Funktion.
Siehe auch QHttpMultiPart, QHttpPart und post().
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data)
Sendet den Inhalt des Byte-Arrays „ data “ an das durch „ request “ angegebene Ziel.
Dies ist eine überladene Funktion.
[since 6.8] QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, std::nullptr_t nptr)
Sendet die durch ` request ` angegebene PUT-Anfrage ohne Body und gibt ein neues ` QNetworkReply `-Objekt zurück.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.8 eingeführt.
QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
Gibt die Umleitungsrichtlinie zurück, die beim Erstellen neuer Anfragen verwendet wird.
Siehe auch ` setRedirectPolicy()` und ` QNetworkRequest::RedirectPolicy`.
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)
Sendet eine benutzerdefinierte Anfrage an den Server, der durch die URL „ request “ identifiziert wird.
verb Es liegt in der Verantwortung des Benutzers, eine Anfrage an den Server zu senden, die gemäß der HTTP-Spezifikation gültig ist.
Diese Methode bietet die Möglichkeit, andere Verben als die üblichen zu senden, die über „ get()“ oder „ post()“ usw. bereitgestellt werden, beispielsweise das Senden eines HTTP-OPTIONS-Befehls.
Ist ` data ` nicht leer, wird der Inhalt des Geräts ` data ` auf den Server hochgeladen; in diesem Fall müssen die Daten zum Lesen offen sein und gültig bleiben, bis für diese Antwort das Signal ` finished()` ausgegeben wird.
Hinweis: Diese Funktion ist derzeit nur für HTTP(S) verfügbar.
Siehe auch „ get()“, „ post()“, „ put()“ und „ deleteResource()“.
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)
Sendet eine benutzerdefinierte Anfrage an den Server, der durch die URL request identifiziert wird.
Sendet den Inhalt der Nachricht „ multiPart “ an das unter request angegebene Ziel.
Dies kann zum Senden von MIME-Multipart-Nachrichten für benutzerdefinierte Verben verwendet werden.
Dies ist eine überladene Funktion.
Siehe auch „ QHttpMultiPart“ , „ QHttpPart “ und „ put()“.
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
Sendet den Inhalt des Byte-Arrays „ data “ an das durch „ request “ angegebene Ziel.
Dies ist eine überladene Funktion.
void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)
Aktiviert oder deaktiviert das automatische Löschen von „ QNetworkReplies “.
Die Einstellung von „ shouldAutoDelete “ auf „true“ entspricht der Einstellung des Attributs „ QNetworkRequest::AutoDeleteReplyOnFinishAttribute “ auf „true“ für alle zukünftigen „ QNetworkRequests “, die an diese Instanz von „ QNetworkAccessManager “ übergeben werden, es sei denn, das Attribut wurde bereits explizit auf dem „ QNetworkRequest “ gesetzt.
Siehe auch autoDeleteReplies und QNetworkRequest::AutoDeleteReplyOnFinishAttribute.
void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)
Legt den Netzwerk-Cache des Managers auf das angegebene „ cache “ fest. Der Cache wird für alle vom Manager versendeten Anfragen verwendet.
Verwenden Sie diese Funktion, um das Netzwerk-Cache-Objekt auf eine Klasse festzulegen, die zusätzliche Funktionen implementiert, wie beispielsweise das Speichern der Cookies in einem permanenten Speicher.
Hinweis: „ QNetworkAccessManager “ übernimmt die Eigentumsrechte am Objekt „ cache “.
QNetworkAccessManager Standardmäßig verfügt der Manager über keinen festgelegten Cache. Qt stellt einen einfachen Festplatten-Cache bereit, „ QNetworkDiskCache “, der verwendet werden kann.
Siehe auch ` cache()` und ` QNetworkRequest::CacheLoadControl`.
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
Legt die „Cookie-Jar“ des Managers auf die angegebene „ cookieJar “ fest. Die „Cookie-Jar“ wird von allen vom Manager versendeten Anfragen verwendet.
Verwenden Sie diese Funktion, um das Cookie-Jar-Objekt auf eine Klasse festzulegen, die zusätzliche Funktionen implementiert, wie beispielsweise das Speichern der Cookies in einem permanenten Speicher.
Hinweis: „ QNetworkAccessManager “ übernimmt die Eigentumsrechte am „ cookieJar “-Objekt.
Befindet sich „ cookieJar “ im selben Thread wie dieses „ QNetworkAccessManager “-Objekt, legt es das übergeordnete Element von „ cookieJar “ so fest, dass das Cookie-Jar gelöscht wird, sobald dieses Objekt ebenfalls gelöscht wird. Wenn Sie Cookie-Jars zwischen verschiedenen „ QNetworkAccessManager “-Objekten gemeinsam nutzen möchten, sollten Sie das übergeordnete Element des Cookie-Jars nach dem Aufruf dieser Funktion auf 0 setzen.
QNetworkAccessManager Standardmäßig implementiert „cookieJar“ keine eigene Cookie-Richtlinie: Es akzeptiert alle vom Server gesendeten Cookies, solange diese korrekt formatiert sind und die Mindestsicherheitsanforderungen erfüllen (die Cookie-Domäne stimmt mit der der Anfrage überein und der Cookie-Pfad stimmt mit dem der Anfrage überein). Um eine eigene Sicherheitsrichtlinie zu implementieren, überschreiben Sie die virtuellen Funktionen „ QNetworkCookieJar::cookiesForUrl()“ und „ QNetworkCookieJar::setCookiesFromUrl()“. Diese Funktionen werden von ` QNetworkAccessManager ` aufgerufen, wenn ein neues Cookie erkannt wird.
Siehe auch cookieJar(), QNetworkCookieJar::cookiesForUrl() und QNetworkCookieJar::setCookiesFromUrl().
void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)
Legt fest, dass bei zukünftigen Anfragen der Proxy proxy verwendet wird. Dies hat keine Auswirkungen auf bereits gesendete Anfragen. Das Signal „ proxyAuthenticationRequired()“ wird ausgelöst, wenn der Proxy eine Authentifizierung verlangt.
Ein mit dieser Funktion festgelegter Proxy wird für alle von QNetworkAccessManager ausgegebenen Anfragen verwendet. In manchen Fällen kann es erforderlich sein, je nach Art der gesendeten Anfrage oder des Zielhosts unterschiedliche Proxys auszuwählen. In diesem Fall sollten Sie die Verwendung von setProxyFactory() in Betracht ziehen.
Siehe auch proxy() und proxyAuthenticationRequired().
void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)
Legt die Proxy-Factory für diese Klasse auf „ factory “ fest. Eine Proxy-Factory wird verwendet, um eine spezifischere Liste von Proxys zu ermitteln, die für eine bestimmte Anfrage verwendet werden sollen, anstatt zu versuchen, für alle Anfragen denselben Proxy-Wert zu verwenden.
Alle von QNetworkAccessManager gesendeten Abfragen haben den Typ „ QNetworkProxyQuery::UrlRequest “.
Beispielsweise könnte eine Proxy-Factory die folgenden Regeln anwenden:
- Wenn sich die Zieladresse im lokalen Netzwerk befindet (z. B. wenn der Hostname keine Punkte enthält oder es sich um eine IP-Adresse im Bereich der Organisation handelt), wird Folgendes zurückgegeben: QNetworkProxy::NoProxy
- Wenn es sich um eine FTP-Anfrage handelt, einen FTP-Proxy zurückgeben
- Wenn es sich um eine HTTP- oder HTTPS-Anfrage handelt, einen HTTP-Proxy zurückgeben
- ansonsten einen SOCKSv5-Proxy-Server zurückgeben
Die Lebensdauer des Objekts ` factory ` wird von ` QNetworkAccessManager` verwaltet. Es löscht das Objekt bei Bedarf.
Hinweis: Wenn mit setProxy() ein bestimmter Proxy festgelegt wird, wird die Factory nicht verwendet.
Siehe auch „ proxyFactory()“, „ setProxy()“ und „ QNetworkProxyQuery “.
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
Legt die Umleitungsrichtlinie des Managers so fest, dass sie dem angegebenen „ policy “ entspricht. Diese Richtlinie wirkt sich auf alle nachfolgenden Anfragen aus, die vom Manager erstellt werden.
Verwenden Sie diese Funktion, um HTTP-Weiterleitungen auf der Ebene des Managers zu aktivieren oder zu deaktivieren.
Hinweis: Beim Erstellen einer Anfrage hat `QNetworkRequest::RedirectAttributePolicy` die höchste Priorität, gefolgt von der Richtlinie des Managers.
Der Standardwert ist „ QNetworkRequest::NoLessSafeRedirectPolicy “. Clients, die auf eine manuelle Umleitungsverarbeitung angewiesen sind, sollten diese Richtlinie explizit in ihrem Code festlegen.
Siehe auch ` redirectPolicy()` und ` QNetworkRequest::RedirectPolicy`.
void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)
Wenn enabled auf true gesetzt ist, befolgt QNetworkAccessManager die HTTP Strict Transport Security-Richtlinie (HSTS, RFC 6797). Bei der Verarbeitung einer Anfrage ersetzt QNetworkAccessManager automatisch das Schema „http“ durch „https“ und verwendet für HSTS-Hosts einen sicheren Transport. Falls explizit festgelegt, wird Port 80 durch Port 443 ersetzt.
Wenn HSTS aktiviert ist, aktualisiert QNetworkAccessManager für jede HTTP-Antwort, die einen HSTS-Header enthält und über einen sicheren Transport empfangen wird, seinen HSTS-Cache, indem entweder ein Host mit einer gültigen Richtlinie gespeichert oder ein Host mit einer abgelaufenen oder deaktivierten HSTS-Richtlinie entfernt wird.
Siehe auch isStrictTransportSecurityEnabled().
void QNetworkAccessManager::setTransferTimeout(int timeout)
Legt „ timeout “ als Übertragungszeitlimit in Millisekunden fest.
Siehe auch „ setTransferTimeout“ (std::chrono::milliseconds), „ transferTimeout()“ und „ transferTimeoutAsDuration()“.
[since 6.7] void QNetworkAccessManager::setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)
Legt das Timeout „ duration “ fest, nach dessen Ablauf die Übertragung abgebrochen wird, wenn keine Daten ausgetauscht wurden.
Übertragungen werden abgebrochen, wenn vor Ablauf des Timeouts keine Bytes übertragen wurden. Der Wert Null bedeutet, dass kein Timer gesetzt ist. Wird kein Argument angegeben, beträgt der Timeout- QNetworkRequest::DefaultTransferTimeout. Wird diese Funktion nicht aufgerufen, ist der Timeout deaktiviert und hat den Wert Null. Die für die ausgeführten Anfragen festgelegten anfragespezifischen Timeouts, die ungleich Null sind, überschreiben diesen Wert. Das bedeutet: Wenn für „ QNetworkAccessManager “ ein Timeout aktiviert ist, muss dieses deaktiviert werden, um eine Anfrage ohne Timeout auszuführen.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch ` transferTimeoutAsDuration()`.
[signal] void QNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
Dieses Signal wird ausgelöst, wenn beim Aufbau der SSL/TLS-Sitzung Fehler aufgetreten sind, darunter auch Fehler bei der Zertifikatsprüfung. Der Parameter ` errors ` enthält die Liste der Fehler, und ` reply ` ist das ` QNetworkReply `, bei dem diese Fehler aufgetreten sind.
Um anzuzeigen, dass die Fehler nicht schwerwiegend sind und die Verbindung fortgesetzt werden soll, sollte die Funktion ` QNetworkReply::ignoreSslErrors()` aus dem mit diesem Signal verbundenen Slot aufgerufen werden. Wird sie nicht aufgerufen, wird die SSL-Sitzung beendet, bevor Daten (einschließlich der URL) ausgetauscht werden.
Dieses Signal kann verwendet werden, um dem Benutzer eine Fehlermeldung anzuzeigen, die darauf hinweist, dass die Sicherheit möglicherweise gefährdet ist, und um die SSL-Einstellungen anzuzeigen (siehe sslConfiguration(), um diese abzurufen). Wenn der Benutzer nach der Analyse des Remote-Zertifikats beschließt, fortzufahren, sollte der Slot ignoreSslErrors() aufrufen.
Siehe auch „ QSslSocket::sslErrors()“, „ QNetworkReply::sslErrors()“, „ QNetworkReply::sslConfiguration()“ und „ QNetworkReply::ignoreSslErrors()“.
QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
Gibt die Liste der HTTP-Strict-Transport-Security-Richtlinien zurück. Diese Liste kann von der ursprünglich über addStrictTransportSecurityHosts() festgelegten Liste abweichen, wenn der HSTS-Cache anhand eines „Strict-Transport-Security“-Antwort-Headers aktualisiert wurde.
Siehe auch addStrictTransportSecurityHosts() und QHstsPolicy.
[virtual] QStringList QNetworkAccessManager::supportedSchemes() const
Listet alle vom Zugriffsmanager unterstützten URL-Schemas auf.
Implementieren Sie diese Methode neu, um in einer Unterklasse von ` QNetworkAccessManager ` eigene unterstützte Schemata bereitzustellen. Dies ist beispielsweise erforderlich, wenn Ihre Unterklasse Unterstützung für neue Protokolle bietet.
int QNetworkAccessManager::transferTimeout() const
Gibt das für Übertragungen verwendete Timeout in Millisekunden zurück.
Siehe auch ` setTransferTimeout()`.
[since 6.7] std::chrono::milliseconds QNetworkAccessManager::transferTimeoutAsDuration() const
Gibt die Zeitüberschreitungsdauer zurück, nach deren Ablauf die Übertragung abgebrochen wird, wenn keine Daten ausgetauscht werden.
Die Standarddauer ist Null, was bedeutet, dass kein Timeout verwendet wird.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch ` setTransferTimeout` (std::chrono::milliseconds).
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.