QNetworkProxy Class
QNetworkProxy 类提供了一个网络层代理。更多
Header: | #include <QNetworkProxy> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
- 所有成员(包括继承成员)的列表
- QNetworkProxy 属于网络编程 API和隐式共享类。
注意:该类中的所有函数都是可重入的。
公共类型
flags | Capabilities |
enum | Capability { TunnelingCapability, ListeningCapability, UdpTunnelingCapability, CachingCapability, HostNameLookupCapability, …, SctpListeningCapability } |
enum | ProxyType { NoProxy, DefaultProxy, Socks5Proxy, HttpProxy, HttpCachingProxy, FtpCachingProxy } |
公共函数
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 |
静态公共成员
QNetworkProxy | applicationProxy() |
void | setApplicationProxy(const QNetworkProxy &networkProxy) |
详细说明
QNetworkProxy 为 Qt Network 类提供了配置网络层代理支持的方法。目前支持的类有QAbstractSocket,QTcpSocket,QUdpSocket,QTcpServer 和QNetworkAccessManager 。代理支持设计得尽可能透明。这意味着您编写的支持网络的现有应用程序应使用以下代码自动支持网络代理。
QNetworkProxy proxy; proxy.setType(QNetworkProxy::Socks5Proxy); proxy.setHostName("proxy.example.com"); proxy.setPort(1080); proxy.setUser("username"); proxy.setPassword("password"); QNetworkProxy::setApplicationProxy(proxy);
除了设置全应用程序代理外,还可以使用QAbstractSocket::setProxy() 和QTcpServer::setProxy() 为单个套接字指定代理。这样,就可以使用以下代码禁用特定套接字的代理:
serverSocket->setProxy(QNetworkProxy::NoProxy);
如果connectToHost(),bind() 或listen() 中使用的地址等同于QHostAddress::LocalHost 或QHostAddress::LocalHostIPv6 ,则不使用网络代理。
每种代理支持都有一些相关限制。在选择使用代理类型之前,应仔细阅读ProxyType 文档。
注意: 对当前连接的套接字所做的更改不会生效。如果需要更改已连接的套接字,应重新连接。
SOCKS5
自 Qt 4 起,SOCKS5 支持基于RFC 1928和RFC 1929。支持的验证方法包括无验证和用户名/密码验证。同时支持 IPv4 和 IPv6。如果启用了QNetworkProxy::HostNameLookupCapability ,域名将通过 SOCKS5 服务器进行解析,否则域名将在本地解析并将 IP 地址发送到服务器。在QUdpSocket 和QTcpServer 中使用 SOCKS5 时,有几件事需要注意:
使用QUdpSocket 时,调用bind() 可能会因超时错误而失败。如果向bind() 传递的端口号不是 0,则不能保证使用的就是指定的端口。请使用localPort() 和localAddress() 获取实际使用的地址和端口号。由于代理 UDP 要经过两个 UDP 连接,因此数据包更有可能被丢弃。
使用QTcpServer 时,调用listen() 可能会因超时错误而失败。如果向listen() 传递的端口号不是 0,则不能保证使用的就是指定的端口。请使用serverPort() 和serverAddress() 获取用于监听连接的实际地址和端口。SOCKS5 每次调用listen() 只支持一个接受的连接,而且每次调用都可能使用不同的serverPort()。
另请参阅 QAbstractSocket 和QTcpServer 。
成员类型文档
枚举 QNetworkProxy::Capability
标志 QNetworkProxy::Capabilities
这些标志表示给定代理服务器支持的功能。
QNetworkProxy 创建对象时,QNetworkProxy::Capabilities.enum 默认设置不同的能力(默认值列表请参见 )。不过,也可以在创建对象后使用 () 更改能力。QNetworkProxy::ProxyType setCapabilities
QNetworkProxy 支持的功能有
常量 | 值 | 说明 |
---|---|---|
QNetworkProxy::TunnelingCapability | 0x0001 | 打开与远程主机的透明隧道 TCP 连接的能力。代理服务器将传输内容从一端逐字转发到另一端,并且不进行缓存。 |
QNetworkProxy::ListeningCapability | 0x0002 | 创建监听套接字,等待来自远程主机的 TCP 连接。 |
QNetworkProxy::UdpTunnelingCapability | 0x0004 | 通过代理服务器与远程主机之间转发 UDP 数据报。 |
QNetworkProxy::CachingCapability | 0x0008 | 缓存传输内容的功能。这种功能针对每种协议和代理类型。例如,HTTP 代理服务器可以缓存通过 "GET "命令传输的网络数据内容。 |
QNetworkProxy::HostNameLookupCapability | 0x0010 | 能连接到远程主机名并对其进行查询,而不是要求应用程序进行名称查询并只请求连接到 IP 地址。 |
QNetworkProxy::SctpTunnelingCapability | 0x00020 | 能打开与远程主机的透明隧道 SCTP 连接。 |
QNetworkProxy::SctpListeningCapability | 0x00040 | 创建监听套接字,等待来自远程主机的 SCTP 连接。 |
Capabilities 类型是QFlags<Capability> 的类型定义。它存储能力值的 OR 组合。
enum QNetworkProxy::ProxyType
该枚举描述了 Qt Network 中提供的网络代理类型。
Qt 可以理解两种代理:透明代理和缓存代理。第一类代理可处理任意数据传输,而第二类代理只能处理特定请求。缓存代理只适用于可以使用它们的特定类。
常量 | 值 | 说明 |
---|---|---|
QNetworkProxy::NoProxy | 2 | 不使用代理 |
QNetworkProxy::DefaultProxy | 0 | 根据使用setApplicationProxy() 设置的应用程序代理确定代理 |
QNetworkProxy::Socks5Proxy | 1 | Socks5 使用代理 |
QNetworkProxy::HttpProxy | 3 | 使用 HTTP 透明代理 |
QNetworkProxy::HttpCachingProxy | 4 | 仅对 HTTP 请求进行代理 |
QNetworkProxy::FtpCachingProxy | 5 | 仅对 FTP 请求进行代理 |
下表列出了不同的代理类型及其功能。由于每种代理类型都有不同的功能,因此在选择代理类型之前,了解这些功能非常重要。
代理类型 | 描述 | 默认功能 |
---|---|---|
SOCKS 5 | 适用于任何类型连接的通用代理。支持 TCP、UDP、端口绑定(传入连接)和身份验证。 | TunnelingCapability,ListeningCapability,UdpTunnelingCapability 、HostNameLookupCapability |
HTTP | 使用 "CONNECT "命令实现,仅支持传出 TCP 连接;支持身份验证。 | TunnelingCapability,CachingCapability 、HostNameLookupCapability |
仅缓存 HTTP | 使用普通 HTTP 命令实现,仅在 HTTP 请求中有用(见QNetworkAccessManager) | CachingCapability,HostNameLookupCapability |
缓存 FTP | 使用 FTP 代理实现,仅在 FTP 请求中有用(参见QNetworkAccessManager) 。 | CachingCapability,HostNameLookupCapability |
此外,请注意不要将应用程序默认代理 (setApplicationProxy()) 设置为不具备TunnelingCapability 功能的代理。如果这样做,QTcpSocket 将不知道如何打开连接。
另请参阅 setType()、type()、capabilities() 和setCapabilities()。
成员函数文档
QNetworkProxy::QNetworkProxy()
构造一个DefaultProxy 类型的 QNetworkProxy。
代理类型由applicationProxy() 决定,默认为NoProxy 或系统范围代理(如果已配置)。
另请参阅 setType() 和setApplicationProxy()。
QNetworkProxy::QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString())
用type,hostName,port,user 和password 构建一个 QNetworkProxy。
代理类型type 的默认功能已自动设置。
另请参阅 capabilities().
QNetworkProxy::QNetworkProxy(const QNetworkProxy &other)
构造other 的副本。
[noexcept]
QNetworkProxy::~QNetworkProxy()
销毁QNetworkProxy 对象。
[static]
QNetworkProxy QNetworkProxy::applicationProxy()
返回应用级网络代理。
如果QAbstractSocket 或QTcpSocket 类型为QNetworkProxy::DefaultProxy ,则使用本函数返回的QNetworkProxy 。
另请参阅 QNetworkProxyFactory,setApplicationProxy(),QAbstractSocket::proxy() 和QTcpServer::proxy()。
QNetworkProxy::Capabilities QNetworkProxy::capabilities() const
返回代理服务器的功能。
另请参阅 setCapabilities() 和type()。
bool QNetworkProxy::hasRawHeader(const QByteArray &headerName) const
如果该代理使用原始标头headerName ,则返回true
。如果代理不是HttpProxy 或HttpCachingProxy 类型,则返回false
。
另请参阅 rawHeader() 和setRawHeader()。
QVariant QNetworkProxy::header(QNetworkRequest::KnownHeaders header) const
如果该代理使用已知网络报头header ,则返回该网络报头的值。如果不存在,则返回 QVariant()(即无效变量)。
另请参阅 QNetworkRequest::KnownHeaders 、rawHeader() 和setHeader()。
[since 6.8]
QHttpHeaders QNetworkProxy::headers() const
返回在此网络请求中设置的标头。
如果代理不是HttpProxy 或HttpCachingProxy 类型,则返回默认构造的QHttpHeaders 。
此函数在 Qt 6.8 中引入。
另请参阅 setHeaders().
QString QNetworkProxy::hostName() const
返回代理主机的主机名。
另请参阅 setHostName()、setPort() 和port()。
bool QNetworkProxy::isCachingProxy() const
如果该代理支持QNetworkProxy::CachingCapability 功能,则返回true
。
在 Qt 4.4 中,该功能与代理类型绑定,但自 Qt 4.5 起,可以通过调用setCapabilities() 从代理中移除缓存功能。
另请参阅 capabilities()、type() 和isTransparentProxy()。
bool QNetworkProxy::isTransparentProxy() const
如果该代理支持 TCP 连接的透明隧道,则返回true
。这与QNetworkProxy::TunnelingCapability 功能相匹配。
在 Qt 4.4 中,该能力与代理类型绑定,但自 Qt 4.5 起,可以通过调用setCapabilities() 从代理中移除缓存能力。
另请参阅 capabilities()、type() 和isCachingProxy()。
QString QNetworkProxy::password() const
返回用于身份验证的密码。
另请参阅 user()、setPassword() 和setUser()。
quint16 QNetworkProxy::port() const
返回代理主机的端口。
另请参阅 setHostName()、setPort() 和hostName()。
QByteArray QNetworkProxy::rawHeader(const QByteArray &headerName) const
返回headerName 头信息的原始形式。如果没有此类头信息,或者代理类型不是HttpProxy 或HttpCachingProxy ,则返回空的QByteArray ,这可能与存在但没有内容的头信息没有区别(使用hasRawHeader() 查找头信息是否存在)。
原始标头可以用setRawHeader() 或setHeader() 设置。
另请参阅 header() 和setRawHeader()。
QList<QByteArray> QNetworkProxy::rawHeaderList() const
返回在此网络代理中设置的所有原始标头的列表。该列表以设置标头的顺序排列。
如果代理类型不是HttpProxy 或HttpCachingProxy ,则会返回空的QList 。
另请参阅 hasRawHeader() 和rawHeader()。
[static]
void QNetworkProxy::setApplicationProxy(const QNetworkProxy &networkProxy)
将应用级网络代理设置为networkProxy 。
如果QAbstractSocket 或QTcpSocket 具有QNetworkProxy::DefaultProxy 类型,则使用此函数设置的QNetworkProxy 。如果想更灵活地确定使用哪个代理,请使用QNetworkProxyFactory 类。
使用此函数设置默认代理值将覆盖使用QNetworkProxyFactory::setApplicationProxyFactory 设置的应用程序代理工厂,并禁止使用系统代理。
另请参阅 QNetworkProxyFactory 、applicationProxy()、QAbstractSocket::setProxy() 和QTcpServer::setProxy()。
void QNetworkProxy::setCapabilities(QNetworkProxy::Capabilities capabilities)
将此代理的功能设置为capabilities 。
另请参阅 setType() 和capabilities()。
void QNetworkProxy::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
将已知头header 的值设置为value ,覆盖之前设置的任何头。此操作也会设置相应的原始 HTTP 头信息。
如果代理不是HttpProxy 或HttpCachingProxy 类型,则此操作无效。
另请参阅 QNetworkRequest::KnownHeaders 、setRawHeader() 和header()。
[since 6.8]
void QNetworkProxy::setHeaders(QHttpHeaders &&newHeaders)
在此网络请求中设置newHeaders 作为标头,覆盖之前设置的任何标头。
如果某些标头与已知标头相对应,则将对其值进行解析,并设置相应的解析形式。
如果代理类型不是HttpProxy 或HttpCachingProxy ,则不会产生任何影响。
此函数在 Qt 6.8 中引入。
另请参阅 headers() 和QNetworkRequest::KnownHeaders 。
[since 6.8]
void QNetworkProxy::setHeaders(const QHttpHeaders &newHeaders)
这是一个重载函数。
该函数在 Qt 6.8 中引入。
void QNetworkProxy::setHostName(const QString &hostName)
将代理主机的主机名设置为hostName 。
另请参阅 hostName()、setPort() 和port()。
void QNetworkProxy::setPassword(const QString &password)
将代理身份验证的密码设置为password 。
另请参阅 user()、setUser() 和password()。
void QNetworkProxy::setPort(quint16 port)
设置代理主机的端口为port 。
另请参阅 hostName()、setHostName() 和port()。
void QNetworkProxy::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
将headerName 的标头设置为headerValue 的值。如果headerName 与已知标头对应(见QNetworkRequest::KnownHeaders ),则将解析原始格式并设置相应的 "熟 "标头。
例如
request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT"));
也会将已知标头 LastModifiedHeader 设置为解析日期的QDateTime 对象。
注意: 两次设置相同的头信息会覆盖之前的设置。要实现多个同名 HTTP 标头的行为,应将两个值连接起来,用逗号(",")分隔,然后设置一个单一的原始标头。
如果代理不是HttpProxy 或HttpCachingProxy 类型,则没有任何作用。
另请参阅 QNetworkRequest::KnownHeaders,setHeader(),hasRawHeader() 和rawHeader()。
void QNetworkProxy::setType(QNetworkProxy::ProxyType type)
将此实例的代理类型设为type 。
请注意,如果使用setCapabilities() 设置了任何功能,则更改代理类型不会改变QNetworkProxy 对象所持有的功能集。
另请参阅 type() 和setCapabilities()。
void QNetworkProxy::setUser(const QString &user)
将代理身份验证的用户名设置为user 。
另请参阅 user()、setPassword() 和password()。
[noexcept]
void QNetworkProxy::swap(QNetworkProxy &other)
将此网络代理实例与other 互换。该操作速度非常快,从未出现过故障。
QNetworkProxy::ProxyType QNetworkProxy::type() const
返回此实例的代理类型。
另请参阅 setType()。
QString QNetworkProxy::user() const
返回用于身份验证的用户名。
另请参阅 setUser()、setPassword() 和password()。
bool QNetworkProxy::operator!=(const QNetworkProxy &other) const
将此网络代理的值与other 进行比较,如果两者不同,则返回true
。
QNetworkProxy &QNetworkProxy::operator=(const QNetworkProxy &other)
将网络代理other 的值指定给该网络代理。
bool QNetworkProxy::operator==(const QNetworkProxy &other) const
将此网络代理的值与other 进行比较,如果两者相等(代理类型、服务器以及用户名和密码相同),则返回true
。
© 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.