Qt之QNetworkProxy(网络代理)

简述

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);

为个别套接字设置代理的另一种方法是使用QAbstractSocket::setProxy()和QTcpServer::setProxy()。这种情况下,可以使用以下方式禁用代理:

serverSocket->setProxy(QNetworkProxy::NoProxy);

网络请求

以HTTP/HTTPS为例,我们经常需要进行抓包来分析数据,这时,利用之前讲过的Fiddler来分析,可参考:Fiddler(Web/HTTP调试利器)

下面,通过调用天天动听的API来获取歌曲的信息,接口的使用不再赘述。

QNetworkAccessManager networkAccessManager;

QUrl url("http://search.dongting.com/song/search/old");

// 设置请求参数
QUrlQuery query;
query.addQueryItem("q", QString::fromLocal8Bit("李荣浩"));
query.addQueryItem("page", "1");
query.addQueryItem("size", "100");

url.setQuery(query);

QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setUrl(url);

// 开始请求
QNetworkReply *pReply = networkAccessManager.get(request);

QEventLoop loop;
connect(pReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();

// 获取歌曲信息
QByteArray bytes = pReply->readAll();

设置代理

打开Fiddler,并没有抓取到想要的信息,Why,因为我们没有设置网络代理。。。

这时,只需要简单地几行代码就可以搞定了。

效果

源码

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("127.0.0.1");
proxy.setPort(8888);
...
networkAccessManager.setProxy(proxy);

这时,所有的信息都尽收眼底。。。O(∩_∩)O~

时间: 2024-09-08 09:10:01

Qt之QNetworkProxy(网络代理)的相关文章

Qt之高级网络操作(HTTP/FTP快速上手)

简述 Qt Network 模块中提供了一些高级别的类,例如:QNetworkRequest.QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作. 在分享的过程中,顺便介绍下 Fiddler,便于我们调试.Fiddler 是一个 HTTP 协议调试代理工具.当然,也可以使用其它 Web/HTTP 调试工具. 简述 HTTP 消息结构 支持的协议 请求 传递 URL 参数 代理 更加复杂的 POST 请求 定制请求头 响应内容 响应状态码 响应头

160WiFi开启共享如何解决网络代理问题?

  第一,开启.用160WiFi开启WiFi热点.电脑的代理上网方式,如果你不清楚,可以向公司的网络管理人员请教. 第二,连接.用手机连接电脑上共享出来的WiFi热点.你会发现,此时虽然手机上信号满格,但却无法使用WiFi来上网. 第三,设置.以安卓手机为例,连接上之后,长按160WiFi热点名称,在出现的提示框中点击修改网络,然后勾选显示高级选项.你会看到代理设置界面,手机默认该设置是"无".你需要下拉选项,将改代理设置选为"手动",将其地址和服务端地址改为电脑设

nginx加速器的实现-基于NGINX网络代理与加速器的设计与实现

问题描述 基于NGINX网络代理与加速器的设计与实现 搭建基于Nginx的网络代理与加速器,要求实现WEB页面的管理,可以添加删除前台服务,编辑后台服务,添加删除负载均衡项,轮询方式进行配置等功能. 解决方案 这些都是修改nginx.conf文件来达到,你要做的就是做一个UI,然后提供各个选项信息,然后对应的读写nginx.conf文件

QT分析之网络编程(六)

在动手分析前,简单介绍一下HTTP协议.HTTP协议是一种为分布式,合作式,超媒体信息系统.它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也可以应用于诸如名称服务器和分布对象管理系统之类的系统,这可以通过扩展它的请求方法,错误代码和报头来实现.HTTP的一个特点是数据表现形式是可输入的和可协商性的,这就允许系统能被建立而独立于数据传输.HTTP在1990年WWW全球信息刚刚起步的时候就得到了应用.该规范定义的协议用"HTTP/1.1"表示,是对RFC26

QT分析之网络编程(二)

前面分析(一)之前没有看QT自带的文档,看了doc之后对QT的网络体系有一个大致的了解: QNatvieSocketEnginePrivate是OS相关的API封装,和QNativeSocketEngine一起构成具体平台SOCKET实现: QTcpSocket.QUdpSocket.QTcpServer构成底层的应用API:QSslSocket是SSL加密相关API: QHttp.QFtp构成高层次应该API: QNetworkAccessManager.QNetworkRequest.QNe

5.关于QT中的网络编程,QTcpSocket,QUdpSocket

 1 新建一个项目:TCPServer.pro A  修改TCPServer.pro,注意:如果是想使用网络库,需要加上network SOURCES += \     TcpServer.cpp \     TcpClient.cpp   HEADERS += \     TcpServer.h \     TcpClient.h   QT += gui widgets network   CONFIG += C++11 B 新建如下文件,因为要用到网络库,所以加上network C 编写

QT分析之网络编程(一)

首先对Windows下的网络编程总结一下: 如果是服务器,其WinSDK调用分别为: WSAStartup() -> socket() -> htons() / htonl() -> bind() -> listen() -> accept() -> recv() / send() -> closesocket() -> WSACleanup() 如果是客户端程序,其调用序列为: WSAStartup() -> socket() -> htons

QT分析之网络编程(八)

话说昨日走到QNetworkReplyImplPrivate::_q_startOperation(),勾引出QNetworkAccessHttpBackend::open(),今日接着欣赏QT之美丽. void QNetworkAccessHttpBackend::open() {     QUrl url = request().url();     bool encrypt = url.scheme().toLower() == QLatin1String("https");  

金山网络代理手游铁血战神 雷军参与投资

新浪科技讯 9月10日上午消息,金山网络宣布斥资1000万元获得喜讯无限(xixun.com)旗下3D格斗手游<铁血战神>的国内代理权.据透露,喜讯无限由金山原副总裁刘芃创建,并且获得现任金山软件董事长雷军的投资.据介绍,<铁血战神>采用全3D制作,整体暗黑魔幻画风中融入了中国民族元素.官方称这款手游在即时战斗.搓招系统等方面具有相当的特色.此次斥资1000万元代理<铁血战神>中国区独家代理权,显示出金山网络在原有的互联网安全业务之外,正进一步向App运营.分发渠道方向