
QNetworkProxyQuery类用于为单个的套接字查询对应的代理设置信息
QNetworkProxyQuery中储存了关于一个将要被创建的套接字或者一个将要发送的请求的详细信息。它被用于 QNetworkProxy 和 QNetworkProxyFactory 中 ,使得程序可以根据请求的细节来精确地控制应当使用哪个代理服务器 。这就使得程序可以根据一些细节的东西 (例如网络协议或目标主机名)来决定该使用哪个代理。
QNetworkProxyQuery支持按照以下参数来选择代理:
•.请求的类型
•.要使用的本地端口号
•.目标主机名
•.目标端口号
•.网络协议名字,例如"http"或"ftp"
•.将要请求的URL
目标主机名 ,指的是将要向外发出的连接套接字所要使用的主机名。它指的是传递给 QTcpSocket::connectToHost ()的 hostName 参数 ,或者是使用 QNetworkRequest 所请求的URL 中的主机名部分。
目标端口号 ,指的是将要向外发出的套接字中所请求连接的端口号 。本地端口号 ,指的是 ,对应的套接字在尝试发起向外的连接之前预期在本地使用的端口 。在大部分情况下 ,本地端口号只会被处于监听状态的套接字 ( QTcpSocket )或数据报套接字( QUdpSocket )使用。
协议名字是一个任意的字符串,表示着要尝试发起的连接的类型。例如,它可以用来匹配一个URL 的模式,比如说"http"、"https"和"ftp"。在大部分情况下,对于代理的选择不会以网络协议类型作为依据,但是我们仍然提供了这项信息,以便程序员可以做出更好的选择,例如,对于基于HTTP 的连接可选择使用一个带有缓存功能的HTTP 代理,而对于其它类型的连接可使用更强大的SOCKSv5 代理。
在使用了运营商管理功能的情况下,网络配置信息指定了要使用哪个网络配置。例如,在手机上,针对蜂窝网络的代理与针对无线网的代理一般是不同的。
某些选择条件并不是对所有的查询类型都有意义的。以下表格,从查询类型的角度,列出了最常用的选择条件。
|
查询类型 |
说明 |
|
请求向远程服务器发起连接的普通套接字,例如 QTcpSocket 。对端的主机名和对端的端口号分别等于传递给 QTcpSocket::connectToHost ()的相应参数值。本地端口号通常是-1,表示该套接字并不要求使用哪个特定的端口号。URL部分不被使用。 |
|
|
基于数据报的套接字,既可发送也可接收。本地端口号、远程主机名及远程端口号,都有可能被使用,也可能不被使用,具体取决于该套接字的特点。URL部分不被使用。 |
|
|
被动的服务器套接字,在某个端口上监听,等待来自网络的入站连接。一般情况下,只有本地端口号会被使用,但是在特定的情况下远程地址也会被使用,例如,用来表示着该套接字预期某个连接将会从哪个远程主机发来。URL部分不被使用。 |
|
|
一个更高级的请求,例如那些由 QNetworkAccessManager 发起的请求。显然,这些请求会使用一个向外的TCP套接字,但是,我们提供了这个特定的查询类型,以表明在URL 部分中有更详细的信息。出现实现的方便性考虑,URL中的主机名和端口号都会被设置为目标地址。 |
注意 ,任何一个选择条件都可能不存在或者是未知 (主机名或协议名为空 QString ,端口号为 -1)。在那种情况下 ,处理该请求的函数应当做出一个最佳猜测,或者采用某种基于实现的默认值 。
参考 QNetworkProxy 、 QNetworkProxyFactory 、 QNetworkAccessManager 和 QAbstractSocket::setProxy () 。
Tyra Banks
HxLauncher: Launch Android applications by voice commands