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