Qt网络编程:QNetworkProxy
一、描述
QNetworkProxy 提供了为 Qt 网络类配置网络层代理支持的方法。当前支持的类有 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);
此类封装的内部数据:
1.1、SOCKS5代理协议
Qt支持SOCKS5代理协议。支持的身份验证方法是无身份验证、用户名/密码身份验证。支持 IPv4 和 IPv6。
如果启用了 QNetworkProxy::HostNameLookupCapability,则域名通过 SOCKS5 服务器解析,否则在本地解析并将 IP 地址发送到服务器。
将 SOCKS5 与 QUdpSocket 和 QTcpServer 一起使用时的记住事项:
- 使用 QUdpSocket,对 bind() 的调用可能会因超时错误而失败。如果将 0 以外的端口号传递给 bind(),则不能保证它是将使用的指定端口。使用 localPort() 和 localAddress() 获取实际使用的地址和端口号。由于代理的 UDP 通过两个 UDP 连接,因此更有可能丢弃数据包。
- 使用 QTcpServer 调用 listen() 可能会因超时错误而失败。如果将 0 以外的端口号传递给 listen(),则不能保证它是将使用的指定端口。使用 serverPort() 和 serverAddress() 获取用于侦听连接的实际地址和端口。 SOCKS5 每次调用 listen() 仅支持一个已接受的连接,并且每次调用都可能导致使用不同的 serverPort()。
二、类型成员
1、QNetworkProxy::Capability:这些标志指示给定代理服务器支持的功能。
- TunnelingCapability(隧道功能):能够打开到远程主机的透明(透明代理见:HTTP代理服务器的工作原理)、隧道(隧道:通过特定的通讯方法找到特定的目标)化的 TCP 连接代理。代理服务器逐字节地将传输从一侧中继到另一侧并且不进行缓存。
- ListeningCapability(监听功能):能够创建侦听socket并等待来自远程主机的传入 TCP 连接。
- UdpTunnelingCapability(Udp隧道功能):能够通过代理服务器与远程主机传递 UDP 数据报。
- CachingCapability(缓存功能):能够缓存传输的内容。 此功能特定于每个协议和代理类型。例如,HTTP 代理可以缓存使用“GET”命令传输的 Web 数据的内容。
- HostNameLookupCapability(主机名查找功能):能够对远程主机名执行查找并连接到它,而不是要求应用程序仅执行名称查找并请求连接到IP地址。
- SctpTunnelingCapability(Sctp隧道功能):能够打开到远程主机的透明隧道 SCTP 连接。
- SctpListeningCapability(Sctp 监听功能):能够创建侦听socket并等待来自远程主机的传入 SCTP 连接。
2、QNetworkProxy::ProxyType:该枚举描述了 Qt 中提供的网络代理类型。Qt 可以理解两种类型的代理:透明代理和缓存代理。 第一组由可以处理任意数据传输的代理组成,而第二组只能处理特定请求。 缓存代理仅对可以使用它们的特定类有意义。
- NoProxy:未使用代理。
- DefaultProxy:使用setApplicationProxy()确定代理。
- Socks5Proxy:使用 Socks5 代理。
- HttpProxy:使用 HTTP 透明代理。
- HttpCachingProxy:仅代理 HTTP 请求。
- FtpCachingProxy:仅代理 FTP 请求。
2.1、代理种类及其功能。
1、SOCKS5
任何类型连接的通用代理。 支持 TCP、UDP、绑定到端口(传入连接)和身份验证。
支持的功能:TunnelingCapability(隧道功能)、ListeningCapability(监听功能)、UdpTunnelingCapability(Udp隧道功能)、HostNameLookupCapability(主机名查找功能)
2、HTTP
仅支持传出TCP连接; 支持身份验证。
支持的功能:TunnelingCapability(隧道功能)、 CachingCapability(缓存功能)、 HostNameLookupCapability(主机名查找功能)
3、Caching-only HTTP
仅在 HTTP 请求的上下文中有用(QNetworkAccessManager)。
支持的功能:CachingCapability(缓存功能)、 HostNameLookupCapability(主机名查找功能)
4、Caching FTP
仅在 FTP 请求的上下文中有用(QNetworkAccessManager)。
支持的功能:CachingCapability(缓存功能)、 HostNameLookupCapability(主机名查找功能)
三、成员函数
1、[static] QNetworkProxy applicationProxy()
返回应用程序级网络代理。
2、bool hasRawHeader(const QByteArray &headerName)
如果参数中的请求头正在用于此代理,则返回 true。如果代理不是 HttpProxy 或 HttpCachingProxy 类型,则返回 false。
3、QVariant header(QNetworkRequest::KnownHeaders header)
如果此代理正在使用已知网络请求头,则返回该请求头的值。
4、bool isCachingProxy()
此代理是否支持 CachingCapability(缓存功能) 功能。
5、bool isTransparentProxy()
此代理是否支持 TunnelingCapability(隧道功能)功能。
6、[static] void setApplicationProxy(const QNetworkProxy &networkProxy)
设置应用程序级网络代理。如果 QAbstractSocket 具有 QNetworkProxy::DefaultProxy 类型,则使用此函数设置的 QNetworkProxy(已连接的断开连重连才能生效)。使用此函数设置默认代理值将覆盖使用 QNetworkProxyFactory::setApplicationProxyFactory() 设置的应用程序代理工厂,并禁用系统代理。
略去设置和获取封装数据的函数。
Qt网络编程:QNetworkProxy相关推荐
- [Qt教程] 第31篇 网络(一)Qt网络编程简介
[Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主 发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilin ...
- Qt网络编程之实例一GET方式
看了两天的Qt网络编程,其实主要就是看了看QNetworkAccessManager.QNetworkRequest和QNetworkReply这三个类的主要内容.在之前,Qt网络编程主要是使用QHt ...
- qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例
先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...
- Qt网络编程——TCP
Qt网络编程--TCP 1. 概念 2. 服务器 3. 客户端 4. TCP服务器和客户端互传文件 5. 资源下载 1. 概念 TCP(Transmission Control Protocol, 传 ...
- Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程
Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍 设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...
- Qt网络编程电子白板
Qt网络编程电子白板 2018-08-11 08:44:04 天行健_地势坤 阅读数 915更多 分类专栏: Qt 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- qt网络编程之使用cookie和ssl
文章目录 所使用的Qt版本:5.14.0 接收Cookies: 发送Cookies: 答案是:有7个(有多少个等号就有多少个cookie,每个cookie用 ; 分隔开来) 代码如下: 参考: 简 述 ...
- 第十四章:Qt网络编程
回顾: 第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽 第五章:Qt容器窗口(父窗口) 第六章:面向对象的Qt编程 第七章:Qt设 ...
- Qt网络编程概述(一)
分享主题 Qt网络编程概述(一) Qt网络编程之QTCPSocket和QTCPServer实例(二) Qt网络编程之QUdpSocket实例(三) Qt网络编程概述 QtNetWork模块提供了若干类 ...
- Qt网络编程-简易版UDP组播通信入门Demo(5)
Qt网络编程-简易版UDP组播通信入门Demo(5)
最新文章
- oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...
- web前端技术分享:koa中间件是如何实现的?
- 点击模型:达观数据提升算法精度的利器
- Extjs FormPanel/TabPanel/GridPanel混合
- 利用fastjson对json转map的操作
- accept标头 php,解决PHP中缺少“授权”请求标头的问题
- 通过中序线索二叉树找某节点的后续前驱☆
- mysql连接查询on_MySql 连接查询中 on 和 where 的区别
- ajax注册用户名为空,怎么用ajax和js检测用户名是否合法和不能为空
- 洛谷——P1014 [NOIP1999 普及组] Cantor 表
- ubuntu linux镜像文件下载地址,ubuntu7.04下载地址大合集
- 基于C++的人机对弈的五子棋AI程序
- Axure中推动拉动元件不生效_mac系统axure元件不能拖动的非正常解决方法
- 本周(12.23-12.29)半价电子书 1
- python获取cpu温度_Python如何读取CPU和GPU的温度?
- 尹同跃捧走2022中国汽车年度人物;比亚迪当选2022最佳中国品牌汽车企业 | 美通社头条...
- #1-1 统计二进制中1的个数
- 打造更完美的小程序商城
- 机器学习(一) 机器学习概述
- 京东夺宝岛抢拍插件(转)