QNetworkProxy Class

Die Klasse QNetworkProxy bietet einen Proxy für die Netzwerkschicht. Mehr...

Header: #include <QNetworkProxy>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

Hinweis: Alle Funktionen in dieser Klasse sind reentrant.

Öffentliche Typen

flags Capabilities
enum Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability }
enum ProxyType { NoProxy, DefaultProxy, Socks5Proxy, HttpProxy, HttpCachingProxy, FtpCachingProxy }

Öffentliche Funktionen

QNetworkProxy()
QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString())
QNetworkProxy(const QNetworkProxy &other)
~QNetworkProxy()
QNetworkProxy::Capabilities capabilities() const
bool hasRawHeader(const QByteArray &headerName) const
QVariant header(QNetworkRequest::KnownHeaders header) const
(since 6.8) QHttpHeaders headers() const
QString hostName() const
bool isCachingProxy() const
bool isTransparentProxy() const
QString password() const
quint16 port() const
QByteArray rawHeader(const QByteArray &headerName) const
QList<QByteArray> rawHeaderList() const
void setCapabilities(QNetworkProxy::Capabilities capabilities)
void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
(since 6.8) void setHeaders(QHttpHeaders &&newHeaders)
(since 6.8) void setHeaders(const QHttpHeaders &newHeaders)
void setHostName(const QString &hostName)
void setPassword(const QString &password)
void setPort(quint16 port)
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
void setType(QNetworkProxy::ProxyType type)
void setUser(const QString &user)
void swap(QNetworkProxy &other)
QNetworkProxy::ProxyType type() const
QString user() const
bool operator!=(const QNetworkProxy &other) const
QNetworkProxy &operator=(const QNetworkProxy &other)
bool operator==(const QNetworkProxy &other) const

Statische öffentliche Mitglieder

QNetworkProxy applicationProxy()
void setApplicationProxy(const QNetworkProxy &networkProxy)

Detaillierte Beschreibung

QNetworkProxy stellt die Methode zur Konfiguration der Proxy-Unterstützung für die Qt Network-Klassen zur Verfügung. Die derzeit unterstützten Klassen sind QAbstractSocket, QTcpSocket, QUdpSocket, QTcpServer und QNetworkAccessManager. Die Proxy-Unterstützung soll so transparent wie möglich sein. Das bedeutet, dass bestehende netzwerkfähige Anwendungen, die Sie geschrieben haben, automatisch Netzwerk-Proxy unterstützen sollten, wenn Sie den folgenden Code verwenden.

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy);

Eine Alternative zur Einstellung eines anwendungsweiten Proxys ist die Angabe des Proxys für einzelne Sockets mit QAbstractSocket::setProxy() und QTcpServer::setProxy(). Auf diese Weise ist es möglich, die Verwendung eines Proxys für bestimmte Sockets mit dem folgenden Code zu deaktivieren:

serverSocket->setProxy(QNetworkProxy::NoProxy);

Der Netzwerk-Proxy wird nicht verwendet, wenn die in connectToHost(), bind() oder listen() verwendete Adresse gleich QHostAddress::LocalHost oder QHostAddress::LocalHostIPv6 ist.

Jede Art der Proxy-Unterstützung ist mit bestimmten Einschränkungen verbunden. Sie sollten die Dokumentation ProxyType sorgfältig lesen, bevor Sie einen Proxy-Typ auswählen.

Hinweis: Änderungen, die an aktuell verbundenen Sockeln vorgenommen werden, werden nicht wirksam. Wenn Sie einen verbundenen Socket ändern müssen, sollten Sie ihn erneut verbinden.

SOCKS5

Die SOCKS5-Unterstützung seit Qt 4 basiert auf RFC 1928 und RFC 1929. Die unterstützten Authentifizierungsmethoden sind keine Authentifizierung und Benutzername/Passwort-Authentifizierung. Es werden sowohl IPv4 als auch IPv6 unterstützt. Domänennamen werden über den SOCKS5-Server aufgelöst, wenn QNetworkProxy::HostNameLookupCapability aktiviert ist, andernfalls werden sie lokal aufgelöst und die IP-Adresse wird an den Server gesendet. Bei der Verwendung von SOCKS5 mit QUdpSocket und QTcpServer gibt es einige Dinge zu beachten:

Bei QUdpSocket kann ein Aufruf von bind() mit einem Timeout-Fehler fehlschlagen. Wenn eine andere Portnummer als 0 an bind() übergeben wird, ist nicht garantiert, dass der angegebene Port verwendet wird. Verwenden Sie localPort() und localAddress(), um die tatsächlich verwendete Adresse und Portnummer zu ermitteln. Da Proxied UDP über zwei UDP-Verbindungen läuft, ist es wahrscheinlicher, dass Pakete verworfen werden.

Mit QTcpServer kann ein Aufruf von listen() mit einem Timeout-Fehler fehlschlagen. Wenn eine andere Portnummer als 0 an listen() übergeben wird, ist nicht garantiert, dass der angegebene Port verwendet wird. Verwenden Sie serverPort() und serverAddress(), um die tatsächliche Adresse und den Port zu ermitteln, die zum Abhören von Verbindungen verwendet werden. SOCKS5 unterstützt nur eine akzeptierte Verbindung pro Aufruf von listen(), und jeder Aufruf wird wahrscheinlich dazu führen, dass eine andere serverPort() verwendet wird.

Siehe auch QAbstractSocket und QTcpServer.

Dokumentation der Mitgliedstypen

enum QNetworkProxy::Capability
flags QNetworkProxy::Capabilities

Diese Flags geben die Fähigkeiten an, die ein bestimmter Proxy-Server unterstützt.

QNetworkProxy QNetworkProxy::Capabilities setzt verschiedene Fähigkeiten standardmäßig, wenn das Objekt erstellt wird (siehe QNetworkProxy::ProxyType für eine Liste der Standardwerte). Es ist jedoch möglich, die Fähigkeiten zu ändern, nachdem das Objekt mit setCapabilities() erstellt wurde.

Die Fähigkeiten, die QNetworkProxy unterstützt, sind:

KonstanteWertBeschreibung
QNetworkProxy::TunnelingCapability0x0001Fähigkeit, transparente, getunnelte TCP-Verbindungen zu einem entfernten Host zu öffnen. Der Proxy-Server leitet die Übertragung wortwörtlich von einer Seite zur anderen weiter und führt kein Caching durch.
QNetworkProxy::ListeningCapability0x0002Fähigkeit, einen Listening-Socket zu erstellen und auf eine eingehende TCP-Verbindung von einem entfernten Host zu warten.
QNetworkProxy::UdpTunnelingCapability0x0004Fähigkeit, UDP-Datagramme über den Proxyserver zu und von einem entfernten Host weiterzuleiten.
QNetworkProxy::CachingCapability0x0008Fähigkeit, den Inhalt der Übertragung zwischenzuspeichern. Diese Fähigkeit ist spezifisch für jedes Protokoll und jeden Proxy-Typ. Beispielsweise können HTTP-Proxys den Inhalt von Webdaten, die mit "GET"-Befehlen übertragen werden, zwischenspeichern.
QNetworkProxy::HostNameLookupCapability0x0010Fähigkeit, eine Verbindung herzustellen, um den Namen eines entfernten Hosts zu suchen und sich mit diesem zu verbinden, im Gegensatz dazu, dass die Anwendung die Namenssuche durchführen und nur eine Verbindung zu IP-Adressen anfordern muss.
QNetworkProxy::SctpTunnelingCapability0x00020Die Möglichkeit, transparente, getunnelte SCTP-Verbindungen zu einem entfernten Host zu öffnen.
QNetworkProxy::SctpListeningCapability0x00040Fähigkeit, einen Listening-Socket zu erstellen und auf eine eingehende SCTP-Verbindung von einem entfernten Host zu warten.

Der Typ Capabilities ist ein Typedef für QFlags<Capability>. Er speichert eine ODER-Kombination von Capability-Werten.

enum QNetworkProxy::ProxyType

Diese Aufzählung beschreibt die Arten von Netzwerk-Proxys, die in Qt zur Verfügung stehen.

Es gibt zwei Arten von Proxys, die Qt versteht: transparente Proxys und Caching-Proxys. Die erste Gruppe besteht aus Proxies, die jeden beliebigen Datentransfer abwickeln können, während die zweite Gruppe nur bestimmte Anfragen bearbeiten kann. Die Caching-Proxys sind nur für die spezifischen Klassen sinnvoll, in denen sie verwendet werden können.

KonstanteWertBeschreibung
QNetworkProxy::NoProxy2Es wird kein Proxying verwendet
QNetworkProxy::DefaultProxy0Proxy wird auf der Grundlage des mit setApplicationProxy() eingestellten Anwendungs-Proxys ermittelt
QNetworkProxy::Socks5Proxy1Socks5 Proxying wird verwendet
QNetworkProxy::HttpProxy3HTTP transparentes Proxying wird verwendet
QNetworkProxy::HttpCachingProxy4Proxying nur für HTTP-Anfragen
QNetworkProxy::FtpCachingProxy5Proxying nur für FTP-Anfragen

In der folgenden Tabelle sind die verschiedenen Proxy-Typen und ihre Fähigkeiten aufgeführt. Da jeder Proxy-Typ unterschiedliche Fähigkeiten hat, ist es wichtig, diese zu verstehen, bevor Sie einen Proxy-Typ auswählen.

Proxy-TypBeschreibungStandard-Fähigkeiten
SOCKS 5Generischer Proxy für alle Arten von Verbindungen. Unterstützt TCP, UDP, Bindung an einen Port (eingehende Verbindungen) und Authentifizierung.TunnelingCapability, ListeningCapability, UdpTunnelingCapability, HostNameLookupCapability
HTTPImplementiert mit dem "CONNECT"-Befehl, unterstützt nur ausgehende TCP-Verbindungen; unterstützt Authentifizierung.TunnelingCapability, CachingCapability, HostNameLookupCapability
Caching-only HTTPWird mit normalen HTTP-Befehlen implementiert und ist nur im Zusammenhang mit HTTP-Anfragen nützlich (siehe QNetworkAccessManager)CachingCapability, HostNameLookupCapability
FTP-ZwischenspeicherungWird unter Verwendung eines FTP-Proxys implementiert und ist nur im Zusammenhang mit FTP-Anfragen nützlich (siehe QNetworkAccessManager)CachingCapability, HostNameLookupCapability

Beachten Sie auch, dass Sie den Standard-Proxy der Anwendung (setApplicationProxy()) nicht auf einen Proxy setzen sollten, der nicht über die Fähigkeit TunnelingCapability verfügt. Wenn Sie dies tun, weiß QTcpSocket nicht, wie er Verbindungen öffnen soll.

Siehe auch setType(), type(), capabilities(), und setCapabilities().

Dokumentation der Mitgliedsfunktionen

QNetworkProxy::QNetworkProxy()

Konstruiert einen QNetworkProxy mit dem Typ DefaultProxy.

Der Proxy-Typ wird durch applicationProxy() bestimmt, der standardmäßig auf NoProxy oder einen systemweiten Proxy eingestellt ist, falls einer konfiguriert ist.

Siehe auch setType() und setApplicationProxy().

QNetworkProxy::QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString())

Konstruiert einen QNetworkProxy mit type, hostName, port, user und password.

Die Standard-Fähigkeiten für den Proxy-Typ type werden automatisch gesetzt.

Siehe auch capabilities().

QNetworkProxy::QNetworkProxy(const QNetworkProxy &other)

Konstruiert eine Kopie von other.

[noexcept] QNetworkProxy::~QNetworkProxy()

Zerstört das Objekt QNetworkProxy.

[static] QNetworkProxy QNetworkProxy::applicationProxy()

Gibt die Netzwerkproxys auf Anwendungsebene zurück.

Wenn ein QAbstractSocket oder QTcpSocket den Typ QNetworkProxy::DefaultProxy hat, wird der von dieser Funktion zurückgegebene QNetworkProxy verwendet.

Siehe auch QNetworkProxyFactory, setApplicationProxy(), QAbstractSocket::proxy(), und QTcpServer::proxy().

QNetworkProxy::Capabilities QNetworkProxy::capabilities() const

Gibt die Fähigkeiten dieses Proxyservers zurück.

Siehe auch setCapabilities() und type().

bool QNetworkProxy::hasRawHeader(const QByteArray &headerName) const

Gibt true zurück, wenn der Raw-Header headerName für diesen Proxy verwendet wird. Gibt false zurück, wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist.

Siehe auch rawHeader() und setRawHeader().

Gibt den Wert des bekannten Netzwerk-Headers header zurück, wenn er für diesen Proxy verwendet wird. Wenn er nicht vorhanden ist, wird QVariant() zurückgegeben (d. h. eine ungültige Variante).

Siehe auch QNetworkRequest::KnownHeaders, rawHeader(), und setHeader().

[since 6.8] QHttpHeaders QNetworkProxy::headers() const

Gibt die Kopfzeilen zurück, die in dieser Netzwerkanfrage gesetzt sind.

Wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, wird das Standardkonstrukt QHttpHeaders zurückgegeben.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch setHeaders().

QString QNetworkProxy::hostName() const

Gibt den Hostnamen des Proxy-Hosts zurück.

Siehe auch setHostName(), setPort(), und port().

bool QNetworkProxy::isCachingProxy() const

Gibt true zurück, wenn dieser Proxy die Fähigkeit QNetworkProxy::CachingCapability unterstützt.

In Qt 4.4 war die Fähigkeit an den Proxy-Typ gebunden, aber seit Qt 4.5 ist es möglich, die Fähigkeit des Zwischenspeicherns von einem Proxy zu entfernen, indem setCapabilities() aufgerufen wird.

Siehe auch capabilities(), type(), und isTransparentProxy().

bool QNetworkProxy::isTransparentProxy() const

Gibt true zurück, wenn dieser Proxy transparentes Tunneln von TCP-Verbindungen unterstützt. Dies entspricht der Fähigkeit QNetworkProxy::TunnelingCapability.

In Qt 4.4 war die Fähigkeit an den Proxy-Typ gebunden, aber seit Qt 4.5 ist es möglich, die Fähigkeit des Zwischenspeicherns aus einem Proxy durch den Aufruf von setCapabilities() zu entfernen.

Siehe auch capabilities(), type(), und isCachingProxy().

QString QNetworkProxy::password() const

Gibt das für die Authentifizierung verwendete Passwort zurück.

Siehe auch user(), setPassword(), und setUser().

quint16 QNetworkProxy::port() const

Gibt den Port des Proxy-Hosts zurück.

Siehe auch setHostName(), setPort(), und hostName().

QByteArray QNetworkProxy::rawHeader(const QByteArray &headerName) const

Gibt die Rohform der Kopfzeile headerName zurück. Wenn keine solche Kopfzeile vorhanden ist oder der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, wird ein leeres QByteArray zurückgegeben, das nicht von einer Kopfzeile zu unterscheiden ist, die zwar vorhanden ist, aber keinen Inhalt hat (verwenden Sie hasRawHeader(), um herauszufinden, ob die Kopfzeile existiert oder nicht).

Rohe Kopfzeilen können mit setRawHeader() oder mit setHeader() gesetzt werden.

Siehe auch header() und setRawHeader().

QList<QByteArray> QNetworkProxy::rawHeaderList() const

Gibt eine Liste aller Raw-Header zurück, die in diesem Netzwerk-Proxy gesetzt sind. Die Liste ist in der Reihenfolge, in der die Header gesetzt wurden.

Wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, wird ein leeres QList zurückgegeben.

Siehe auch hasRawHeader() und rawHeader().

[static] void QNetworkProxy::setApplicationProxy(const QNetworkProxy &networkProxy)

Setzt die Netzwerkproxys auf Anwendungsebene auf networkProxy.

Wenn ein QAbstractSocket oder QTcpSocket den Typ QNetworkProxy::DefaultProxy hat, wird der mit dieser Funktion eingestellte QNetworkProxy verwendet. Wenn Sie mehr Flexibilität bei der Bestimmung des verwendeten Proxys wünschen, verwenden Sie die Klasse QNetworkProxyFactory.

Das Setzen eines Standard-Proxy-Wertes mit dieser Funktion setzt den mit QNetworkProxyFactory::setApplicationProxyFactory gesetzten Anwendungs-Proxy außer Kraft und deaktiviert die Verwendung eines System-Proxys.

Siehe auch QNetworkProxyFactory, applicationProxy(), QAbstractSocket::setProxy(), und QTcpServer::setProxy().

void QNetworkProxy::setCapabilities(QNetworkProxy::Capabilities capabilities)

Setzt die Fähigkeiten dieses Proxys auf capabilities.

Siehe auch setType() und capabilities().

void QNetworkProxy::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)

Legt den Wert der bekannten Kopfzeile header auf value fest und überschreibt damit alle zuvor festgelegten Kopfzeilen. Dieser Vorgang setzt auch den entsprechenden rohen HTTP-Header.

Wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, hat dies keine Auswirkungen.

Siehe auch QNetworkRequest::KnownHeaders, setRawHeader(), und header().

[since 6.8] void QNetworkProxy::setHeaders(QHttpHeaders &&newHeaders)

Setzt newHeaders als Kopfzeilen in dieser Netzwerkanfrage und überschreibt alle zuvor gesetzten Kopfzeilen.

Wenn einige Kopfzeilen den bekannten Kopfzeilen entsprechen, werden die Werte geparst und die entsprechende geparste Form wird ebenfalls festgelegt.

Wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, hat dies keinen Effekt.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch headers() und QNetworkRequest::KnownHeaders.

[since 6.8] void QNetworkProxy::setHeaders(const QHttpHeaders &newHeaders)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.8 eingeführt.

void QNetworkProxy::setHostName(const QString &hostName)

Legt den Hostnamen des Proxy-Hosts auf hostName fest.

Siehe auch hostName(), setPort(), und port().

void QNetworkProxy::setPassword(const QString &password)

Setzt das Passwort für die Proxy-Authentifizierung auf password.

Siehe auch user(), setUser(), und password().

void QNetworkProxy::setPort(quint16 port)

Setzt den Port des Proxy-Hosts auf port.

Siehe auch hostName(), setHostName(), und port().

void QNetworkProxy::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)

Setzt den Header headerName auf den Wert headerValue. Wenn headerName einer bekannten Kopfzeile entspricht (siehe QNetworkRequest::KnownHeaders), wird das Rohformat geparst und die entsprechende "gekochte" Kopfzeile wird ebenfalls gesetzt.

Ein Beispiel:

request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT"));

setzt auch den bekannten Header LastModifiedHeader auf das QDateTime Objekt des geparsten Datums.

Hinweis: Wird derselbe Header zweimal gesetzt, wird die vorherige Einstellung überschrieben. Um das Verhalten mehrerer gleichnamiger HTTP-Header zu erreichen, sollten Sie die beiden Werte durch ein Komma (",") trennen und einen einzigen Raw-Header setzen.

Wenn der Proxy nicht vom Typ HttpProxy oder HttpCachingProxy ist, hat dies keine Auswirkungen.

Siehe auch QNetworkRequest::KnownHeaders, setHeader(), hasRawHeader(), und rawHeader().

void QNetworkProxy::setType(QNetworkProxy::ProxyType type)

Setzt den Proxy-Typ für diese Instanz auf type.

Beachten Sie, dass das Ändern des Typs eines Proxys nicht die Menge der Fähigkeiten ändert, die dieses QNetworkProxy Objekt besitzt, wenn irgendwelche Fähigkeiten mit setCapabilities() gesetzt worden sind.

Siehe auch type() und setCapabilities().

void QNetworkProxy::setUser(const QString &user)

Legt den Benutzernamen für die Proxy-Authentifizierung auf user fest.

Siehe auch user(), setPassword(), und password().

[noexcept] void QNetworkProxy::swap(QNetworkProxy &other)

Tauscht diese Netzwerk-Proxy-Instanz mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.

QNetworkProxy::ProxyType QNetworkProxy::type() const

Gibt den Proxy-Typ für diese Instanz zurück.

Siehe auch setType().

QString QNetworkProxy::user() const

Gibt den für die Authentifizierung verwendeten Benutzernamen zurück.

Siehe auch setUser(), setPassword(), und password().

bool QNetworkProxy::operator!=(const QNetworkProxy &other) const

Vergleicht den Wert dieses Netzwerk-Proxys mit other und gibt true zurück, wenn sie sich unterscheiden.

QNetworkProxy &QNetworkProxy::operator=(const QNetworkProxy &other)

Weist diesem Netzwerk-Proxy den Wert des Netzwerk-Proxy other zu.

bool QNetworkProxy::operator==(const QNetworkProxy &other) const

Vergleicht den Wert dieses Netzwerk-Proxys mit other und gibt true zurück, wenn sie gleich sind (gleicher Proxy-Typ, Server sowie Benutzername und Passwort)

© 2025 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.