QNetworkProxyQuery Class
QNetworkProxyQuery 类用于查询套接字的代理设置。更多内容...
| 头文件: | #include <QNetworkProxyQuery> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
- 所有成员的列表,包括继承的成员
- QNetworkProxyQuery 属于“隐式共享类”的一部分。
公共类型
| enum | QueryType { TcpSocket, UdpSocket, SctpSocket, TcpServer, UrlRequest, SctpServer } |
公共函数
| QNetworkProxyQuery() | |
| QNetworkProxyQuery(const QUrl &requestUrl, QNetworkProxyQuery::QueryType queryType = UrlRequest) | |
| QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType queryType = TcpServer) | |
| QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType queryType = TcpSocket) | |
| QNetworkProxyQuery(const QNetworkProxyQuery &other) | |
| ~QNetworkProxyQuery() | |
| int | localPort() const |
| QString | peerHostName() const |
| int | peerPort() const |
| QString | protocolTag() const |
| QNetworkProxyQuery::QueryType | queryType() const |
| void | setLocalPort(int port) |
| void | setPeerHostName(const QString &hostname) |
| void | setPeerPort(int port) |
| void | setProtocolTag(const QString &protocolTag) |
| void | setQueryType(QNetworkProxyQuery::QueryType type) |
| void | setUrl(const QUrl &url) |
| void | swap(QNetworkProxyQuery &other) |
| QUrl | url() const |
| bool | operator!=(const QNetworkProxyQuery &other) const |
| QNetworkProxyQuery & | operator=(const QNetworkProxyQuery &other) |
| bool | operator==(const QNetworkProxyQuery &other) const |
详细说明
QNetworkProxyQuery 保存着正在创建的套接字或正在发出的请求的详细信息。QNetworkProxy 和QNetworkProxyFactory 会使用它,以便应用程序能够根据查询的详细信息,对使用哪些代理服务器进行更精细的控制。这使得应用程序能够根据协议或目标主机名等因素应用不同的设置。
QNetworkProxyQuery 支持以下代理选择标准:
- 查询类型
- 要使用的本地端口号
- 目标主机名
- 目标端口号
- 协议名称,例如“http”或“ftp”
- 要请求的 URL
对于出站连接套接字,目标主机名即为连接中的主机。它是传递给QTcpSocket::connectToHost() 的hostName 参数,或是通过QNetworkRequest 请求的 URL 中的主机部分。
对于出站套接字,目标端口号是指请求连接的目标端口;而本地端口号是指套接字在尝试建立外部连接之前希望在本地使用的端口。在大多数情况下,本地端口号仅用于监听套接字(QTcpSocket )或数据报套接字(QUdpSocket )。
协议名称是一个任意字符串,用于指示正在尝试建立的连接类型。例如,它可以与 URL 的方案(如“http”、“https”和“ftp”)相匹配。 在大多数情况下,代理的选择不会因协议而改变,但提供此信息是为了便于做出更优的选择,例如:对于基于 HTTP 的连接,可选择缓存型 HTTP 代理;而对于其他所有连接,则可选择功能更强大的 SOCKSv5 代理。
某些标准可能并不适用于所有类型的查询。下表根据查询类型列出了最常用的标准。
| 查询类型 | 描述 |
|---|---|
| TcpSocket | 请求连接到远程服务器的普通套接字,例如QTcpSocket 。对端主机名和对端端口与传递给QTcpSocket::connectToHost() 的值相匹配。本地端口通常为 -1,表示套接字对应使用哪个端口没有偏好。不使用 URL 组件。 |
| UdpSocket | 基于数据报的套接字,既可发送也可接收数据。本地端口、远程主机或远程端口字段均可使用,也可留空,具体取决于套接字的特性。不使用 URL 组件。 |
| SctpSocket | 面向消息的套接字,用于请求与远程服务器建立连接。对等主机名和对等端口应与传递给QSctpSocket::connectToHost() 的值一致。本地端口通常为 -1,表示套接字对使用哪个端口没有偏好。URL 组件不被使用。 |
| TcpServer | 被动服务器套接字,在某个端口上监听并等待来自网络的传入连接。通常仅使用本地端口,但在特定情况下也可使用远程地址,例如用于指定预期连接来自哪个远程主机。URL 组件不被使用。 |
| UrlRequest | 更高层次的请求,例如来自QNetworkAccessManager 的请求。此类请求不可避免地会使用出站 TCP 套接字,但提供此查询类型是为了表明 URL 组件中包含更详细的信息。为便于实现,URL 中的主机和端口被设置为目标地址。 |
| SctpServer | 被动服务器套接字,它们在 SCTP 端口上监听并等待来自网络的传入连接。通常仅使用本地端口,但在特定情况下可能使用远程地址,例如用于指示预期来自哪个远程主机的连接。URL 组件不被使用。 |
需要注意的是,任何标准都可能缺失或未知(主机名或协议名处的QString 为空,端口号为 -1)。如果发生这种情况,执行查询的函数应尽可能做出合理推测,或应用某些由实现定义的默认值。
另请参阅 QNetworkProxy 、QNetworkProxyFactory 、QNetworkAccessManager 以及QAbstractSocket::setProxy()。
成员类型文档
enum QNetworkProxyQuery::QueryType
描述了一个QNetworkProxyQuery 查询的类型。
| 常量 | 值 | 描述 |
|---|---|---|
QNetworkProxyQuery::TcpSocket | 0 | 一个普通的、外发 TCP 套接字 |
QNetworkProxyQuery::UdpSocket | 1 | 基于数据报的 UDP 套接字,可发送至多个目的地 |
QNetworkProxyQuery::SctpSocket | 2 | 一个面向消息的、外发 SCTP 套接字 |
QNetworkProxyQuery::TcpServer | 100 | 一个监听来自网络的传入连接的 TCP 服务器 |
QNetworkProxyQuery::UrlRequest | 101 | 一个更复杂的请求,涉及加载一个 URL |
QNetworkProxyQuery::SctpServer | 102 | 一个监听来自网络的传入连接的 SCTP 服务器 |
另请参阅 queryType() 和setQueryType()。
成员函数文档
QNetworkProxyQuery::QNetworkProxyQuery()
创建一个默认的 QNetworkProxyQuery 对象。默认情况下,查询类型为QNetworkProxyQuery::TcpSocket 。
[explicit] QNetworkProxyQuery::QNetworkProxyQuery(const QUrl &requestUrl, QNetworkProxyQuery::QueryType queryType = UrlRequest)
使用 URLrequestUrl 构建一个 QNetworkProxyQuery,并将查询类型设置为queryType 。
另请参阅 protocolTag()、peerHostName() 以及peerPort()。
[explicit] QNetworkProxyQuery::QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType queryType = TcpServer)
构建一个类型为queryType 的QNetworkProxyQuery,并将协议标签设置为protocolTag 。该构造函数适用于QNetworkProxyQuery::TcpSocket 查询,因为它将本地端口号设置为bindPort 。
请注意,bindPort 的类型为 quint16,用于指示所请求的确切端口号。在此上下文中不允许使用 -1(未知)作为值。
另请参阅 localPort()。
QNetworkProxyQuery::QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType queryType = TcpSocket)
创建一个类型为queryType 的QNetworkProxyQuery对象,并将协议标签设置为protocolTag 。该构造函数适用于QNetworkProxyQuery::TcpSocket 查询,因为它将对等方的主机名设置为hostname ,并将对等方的端口号设置为port 。
QNetworkProxyQuery::QNetworkProxyQuery(const QNetworkProxyQuery &other)
构建一个 QNetworkProxyQuery 对象,该对象是other 的副本。
[noexcept] QNetworkProxyQuery::~QNetworkProxyQuery()
销毁此QNetworkProxyQuery 对象。
int QNetworkProxyQuery::localPort() const
返回将接受来自远程服务器传入数据包的套接字端口号;如果端口未知,则返回 -1。
另请参阅 peerPort()、peerHostName() 和setLocalPort()。
QString QNetworkProxyQuery::peerHostName() const
返回所请求出站连接的主机名或 IP 地址;如果未知远程主机名,则返回空字符串。
如果查询类型为QNetworkProxyQuery::UrlRequest ,则该函数返回所请求 URL 中的主机部分。
另请参阅 peerPort()、localPort() 和setPeerHostName()。
int QNetworkProxyQuery::peerPort() const
返回出站请求的端口号;如果端口号未知,则返回 -1。
如果查询类型为QNetworkProxyQuery::UrlRequest ,则该函数返回所请求 URL 的端口号。通常,框架会根据其默认值自动填充端口号。
另请参阅 peerHostName()、localPort() 和setPeerPort()。
QString QNetworkProxyQuery::protocolTag() const
返回此QNetworkProxyQuery 对象的协议标签;如果协议标签未知,则返回一个空的QString 。
对于类型为 `QNetworkProxyQuery::UrlRequest` 的查询,此函数返回 URL 中方案组件的值。
另请参阅 setProtocolTag() 和url()。
QNetworkProxyQuery::QueryType QNetworkProxyQuery::queryType() const
返回查询类型。
另请参阅 setQueryType()。
void QNetworkProxyQuery::setLocalPort(int port)
设置套接字在本地用于从远程服务器接收发往port 的传入数据包的端口号。本地端口通常与QNetworkProxyQuery::TcpServer 和QNetworkProxyQuery::UdpSocket 这两种查询类型配合使用。
有效值为 0 到 65535(其中 0 表示接受任何端口号)或 -1,这意味着本地端口号未知或不适用。
在某些情况下,对于特殊协议,本地端口号也可与类型为QNetworkProxyQuery::TcpSocket 的查询一起使用。此时,套接字表示希望在连接到远程主机时使用端口号port 。
另请参阅 localPort()、setPeerPort() 和setPeerHostName()。
void QNetworkProxyQuery::setPeerHostName(const QString &hostname)
将请求的出站连接的主机名设置为hostname 。若主机名为空,则表示远程主机未知。
在QNetworkProxyQuery::UdpSocket 或QNetworkProxyQuery::TcpServer 查询类型中,对等主机名也可用于指示预期传入连接的源地址。
另请参阅 peerHostName()、setPeerPort() 和setLocalPort()。
void QNetworkProxyQuery::setPeerPort(int port)
将出站连接的请求端口号设置为port 。有效值为 1 到 65535,或 -1(表示远程端口号未知)。
在QNetworkProxyQuery::UdpSocket 或QNetworkProxyQuery::TcpServer 查询类型中,对端端口号也可用于指示预期传入连接的端口号。
另请参阅 peerPort()、setPeerHostName() 和setLocalPort()。
void QNetworkProxyQuery::setProtocolTag(const QString &protocolTag)
将此QNetworkProxyQuery 对象的协议标签设置为protocolTag 。
协议标签是一个任意字符串,用于指示套接字上正在使用的协议,例如“http”、“xmpp”、“telnet”等。 后端会利用协议标签返回更符合该协议特性的请求:例如,HTTP 连接可以使用缓存型 HTTP 代理服务器,而所有其他连接则使用功能更强大的 SOCKSv5 代理服务器。
另请参阅 protocolTag()。
void QNetworkProxyQuery::setQueryType(QNetworkProxyQuery::QueryType type)
将此对象的查询类型设置为type 。
另请参阅 queryType()。
void QNetworkProxyQuery::setUrl(const QUrl &url)
将此QNetworkProxyQuery 对象的 URL 组件设置为url 。设置 URL 时,协议标签、远程主机名和端口号也会随之设置。这样做是为了便于实现用于确定应使用哪个代理服务器的代码。
另请参阅 url()、peerHostName() 和peerPort()。
[noexcept] void QNetworkProxyQuery::swap(QNetworkProxyQuery &other)
将此网络代理查询实例替换为other 。此操作速度极快,且绝不会失败。
QUrl QNetworkProxyQuery::url() const
当查询类型为QNetworkProxyQuery::UrlRequest 时,返回此QNetworkProxyQuery 对象的 URL 组件。
另请参阅 setUrl()。
bool QNetworkProxyQuery::operator!=(const QNetworkProxyQuery &other) const
如果该QNetworkProxyQuery 对象所包含的数据与other 中的数据不一致,则返回true 。
QNetworkProxyQuery &QNetworkProxyQuery::operator=(const QNetworkProxyQuery &other)
复制other 中的内容。
bool QNetworkProxyQuery::operator==(const QNetworkProxyQuery &other) const
如果该QNetworkProxyQuery 对象包含与other 相同的数据,则返回true 。
© 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.