zoukankan      html  css  js  c++  java
  • 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~

  • 相关阅读:
    建议使用nullptr而不是NULL
    二叉树的遍历(三种遍历方式,前中后序;递归,栈,迭代实现)
    455.分发饼干Easy Leetcode
    java 报错:Implicit super constructor Point() is undefined. Must explicitly invoke another constructor
    求解字符串所包含子串的个数
    数组去重
    vue watch
    mysql设置指定字段不能为负数
    Shell脚本监控服务存活状态及异常,并触发钉钉webhook报警
    Shell常用语法
  • 原文地址:https://www.cnblogs.com/itrena/p/5938335.html
Copyright © 2011-2022 走看看