QT5(9)HTTP POST GET COOKIE 网络编程 Fiddler代理

应用篇

一、主要使用到的类

#include <QtNetwork/QNetworkAccessManager> //链接网络
#include <QtNetwork/QNetworkReply> //处理接收数据
#include <QtNetwork/QNetworkRequest> //处理请求数据
#include <QNetworkCookie> //单个cookie
#include <QNetworkCookieJar> //储存cookie

注意:
1、QT的HTTP请求方法都是异步的,如果你要同步可以使用QEventLoop和connect搭配使用实现;如果你要使用异步,那直接使用connect当完成请求时唤醒某个函数。
2、QT获取cookie时使用QNetworkCookieJar类,不过QNetworkCookieJar类获取cookies函数类型为protected。所以我们需要重新声明一个类继承自QNetworkCookieJar类来获取cookie。

二、GET

typedef QPair<QByteArray,QList<QNetworkCookie> > HTTPBACK;

HTTPBACK AccessHttp::get(QString url){
    QEventLoop loop;
//    为后期获取cookie
    AccessHttp netCookies; //我的类AccessHttp继承了QNetworkCookieJar
    QNetworkAccessManager *manager = new QNetworkAccessManager();

    QNetworkRequest request;
    request.setUrl(url);

    manager -> setCookieJar(&netCookies);
    QNetworkReply *reply = manager -> get(request);
//    qt的http是异步的,为完成同步,使用子事件循环。当完成信息获取,退出子事件。
    QObject::connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));
    loop.exec();

    QByteArray con = reply -> readAll();
    QList<QNetworkCookie> cookies = netCookies.allCookies();
    return HTTPBACK(con,cookies);
}

三、POST

typedef QPair<QByteArray,QList<QNetworkCookie> > HTTPBACK;
HTTPBACK AccessHttp::post(QString url, QByteArray postData, QList<QNetworkCookie> insertCookie, MAPBYTE headers){
    QEventLoop loop;
    // 为后期获取cookie
    AccessHttp netCookies; //我的类AccessHttp继承了QNetworkCookieJar
    QNetworkAccessManager *manager = new QNetworkAccessManager();

    QNetworkRequest request;
    request.setUrl(QUrl(url));
    //设置头
    for(MAPBYTE::iterator it = headers.begin(); it != headers.end(); it++){
        request.setRawHeader(it.key(), it.value());
    }

    // 插入cookie
    netCookies.setAllCookies(insertCookie);
    manager -> setCookieJar(&netCookies);

    QNetworkReply *reply = manager -> post(request,postData);
//    qt的http是异步的,为完成同步,使用子事件循环。当完成信息获取,退出子事件。
    QObject::connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));
    loop.exec();

    QByteArray con = reply -> readAll();
    QList<QNetworkCookie> cookies = netCookies.allCookies();
    return HTTPBACK(con,cookies);
}

四、注意

如果获取到的数据是gzip压缩的,需要引入zlib解析。

四、设置代理用于Fiddler监听

由于Fiddler是设置代理服务器的方式监听,而Qt的http是直连。需要设置一下代理让Fiddler抓取。

    QNetworkProxy proxy;
//    proxy.setType(QNetworkProxy::Socks5Proxy);
    proxy.setType(QNetworkProxy::HttpProxy);
    proxy.setHostName("127.0.0.1");
    proxy.setPort(8888);
//    proxy.setUser("");
//    proxy.setPassword("");
    QNetworkProxy::setApplicationProxy(proxy);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值