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~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】