qt 网络库使用介绍

qt 网络库使用介绍

在.pro文件中,要手动添加network模块:QT += network

有三个核心类,

  • QNetworkAccessManager: 发送get或者post请求。

    用get方法或者post方法发送get/post请求

    参数是QNetworkRequest,返回值是QNetworkReply

  • QNetworkRequest:包装请求信息

    用setHeader方法设置请求的header

    用setUrl方法设置服务器的IP和端口

  • QNetworkReply:包装接服务器返回的信息。

    注意,用rep->readAll();得到返回的数据;用rep->readAll(key);得到返回的header信息

一个小例子,给百度发一个get请求。

注意事项:

1,设置http请求头UserAgent,目的是伪装成浏览器的发送的http请求。

2,调用get方法后,在等待服务器的返回的过程中,get方法或者post方法是不阻塞的,调用后立即返回。

3,因为get/post方法不阻塞,那怎么才能知道服务器什么时候处理完,返回给客户端呢,监听QNetworkReply里的&QNetworkReply::readyRead信号。

4,qDebug() << 2222;会先于qDebug() << data;被打印出来。原因是get方法不阻塞。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QNetworkAccessManager* mgr = new QNetworkAccessManager(this);

    QString agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36";
    QNetworkRequest res;
    //设置http请求头UserAgent,目的是伪装成浏览器的发送的http请求
    res.setHeader(QNetworkRequest::UserAgentHeader, agent);
    //设置URL
    //res.setUrl(QUrl("http://www.baidu.com:80"));
    res.setUrl(QUrl("http://10.210.65.129:80"));

    //发送http请求,返回的结果放到rep里。
    //QNetworkReply* rep = mgr->post(res, "");
    QNetworkReply* rep = mgr->get(res);

    //读服务器返回的数据
    connect(rep, &QNetworkReply::readyRead, this, [=](){

        //取得服务器回发的header数据
        QVariant url =  rep->header(QNetworkRequest::LocationHeader);
        //服务器回发的数据,但不包括头,头的信息在header里。
        QByteArray data = rep->readAll();
        qDebug() << data;
        qDebug() << url.toString();
    });

    qDebug() << 2222;
}

c/c++ 学习互助QQ群:877684253

1414315-20181106214320230-961379709.jpg

本人微信:xiaoshitou5854

转载于:https://www.cnblogs.com/xiaoshiwang/p/11499101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值