• 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

    本人微信:xiaoshitou5854

  • 相关阅读:
    js对象数组(JSON) 根据某个共同字段 分组
    一个 函数 用来转化esSearch 的range 条件
    关于 vuex 报错 Do not mutate vuex store state outside mutation handlers.
    android listview 重用view导致的选择混乱问题
    android SDK和ADT的更新
    Android中adb push和adb install的使用区别
    pycharm中添加扩展工具pylint
    su Authentication failure解决
    Putty以及adb网络调试
    有关android源码编译的几个问题
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/11499101.html
Copyright © 2020-2023  润新知