一、描述

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相关推荐

  1. [Qt教程] 第31篇 网络(一)Qt网络编程简介

    [Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主  发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilin ...

  2. Qt网络编程之实例一GET方式

    看了两天的Qt网络编程,其实主要就是看了看QNetworkAccessManager.QNetworkRequest和QNetworkReply这三个类的主要内容.在之前,Qt网络编程主要是使用QHt ...

  3. qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例

    先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...

  4. Qt网络编程——TCP

    Qt网络编程--TCP 1. 概念 2. 服务器 3. 客户端 4. TCP服务器和客户端互传文件 5. 资源下载 1. 概念 TCP(Transmission Control Protocol, 传 ...

  5. Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程

    Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍         设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...

  6. Qt网络编程电子白板

    Qt网络编程电子白板 2018-08-11 08:44:04 天行健_地势坤 阅读数 915更多 分类专栏: Qt 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  7. qt网络编程之使用cookie和ssl

    文章目录 所使用的Qt版本:5.14.0 接收Cookies: 发送Cookies: 答案是:有7个(有多少个等号就有多少个cookie,每个cookie用 ; 分隔开来) 代码如下: 参考: 简 述 ...

  8. 第十四章:Qt网络编程

    回顾: 第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽 第五章:Qt容器窗口(父窗口) 第六章:面向对象的Qt编程 第七章:Qt设 ...

  9. Qt网络编程概述(一)

    分享主题 Qt网络编程概述(一) Qt网络编程之QTCPSocket和QTCPServer实例(二) Qt网络编程之QUdpSocket实例(三) Qt网络编程概述 QtNetWork模块提供了若干类 ...

  10. Qt网络编程-简易版UDP组播通信入门Demo(5)

    Qt网络编程-简易版UDP组播通信入门Demo(5)

最新文章

  1. oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...
  2. web前端技术分享:koa中间件是如何实现的?
  3. 点击模型:达观数据提升算法精度的利器
  4. Extjs FormPanel/TabPanel/GridPanel混合
  5. 利用fastjson对json转map的操作
  6. accept标头 php,解决PHP中缺少“授权”请求标头的问题
  7. 通过中序线索二叉树找某节点的后续前驱☆
  8. mysql连接查询on_MySql 连接查询中 on 和 where 的区别
  9. ajax注册用户名为空,怎么用ajax和js检测用户名是否合法和不能为空
  10. 洛谷——P1014 [NOIP1999 普及组] Cantor 表
  11. ubuntu linux镜像文件下载地址,ubuntu7.04下载地址大合集
  12. 基于C++的人机对弈的五子棋AI程序
  13. Axure中推动拉动元件不生效_mac系统axure元件不能拖动的非正常解决方法
  14. 本周(12.23-12.29)半价电子书 1
  15. python获取cpu温度_Python如何读取CPU和GPU的温度?
  16. 尹同跃捧走2022中国汽车年度人物;比亚迪当选2022最佳中国品牌汽车企业 | 美通社头条...
  17. #1-1 统计二进制中1的个数
  18. 打造更完美的小程序商城
  19. 机器学习(一) 机器学习概述
  20. 京东夺宝岛抢拍插件(转)

热门文章

  1. Electron应用中实现调用外接摄像头并拍照上传
  2. Windows服务器远程桌面不能复制粘贴的解决方法
  3. python中wx模块介绍_python wx模块如何安装
  4. 鸿蒙系统是基于安卓还是独立系统,华为鸿蒙系统基于安卓还是Linux呢?
  5. DIY伺服驱动器方案
  6. 快速对Oracle数据库的了解 ---2
  7. 温湿度传感器(AM2312)
  8. 4、联合登录和单点登录
  9. 中国枭龙战机座舱设计远超最新F-16与台风同级
  10. Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Ngi