码迷,mamicode.com
首页 > Web开发 > 详细

Qt之QNetworkProxy(网络代理)

时间:2016-05-27 12:24:13      阅读:441      评论:0      收藏:0      [点我收藏+]

标签:

简述

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~

Qt之QNetworkProxy(网络代理)

标签:

原文地址:http://blog.csdn.net/liang19890820/article/details/51492611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!