Qt使用HTTP通信(以调用百度翻译api为例)

来源:互联网 发布:怎么在淘宝上投诉卖家 编辑:程序博客网 时间:2024/06/11 07:29

HTTP是超文本传输协议,它是一种文件传输协议。

Qt使用HTTP主要用到以下三个类:

  1. QNetworkAccessManager 该类允许应用发送网络请求并接收响应。
  2. QNetworkRequest 该类包含了一个由QNetworkAccessManager发送的请求。
  3. QNetworkReply 该类包含接收到的数据部分和QNetworkAccessManager发送请求的头部。

主要步骤:

  1. 工程文件.pro里必须有network
    QT       += core gui network

  2. 阅读百度翻译api帮助文档,定义请求体各段内容:
    QString MainWindow::API = "http://api.fanyi.baidu.com/api/trans/vip/translate?";QString MainWindow::from = "en";QString MainWindow::to = "zh";QString MainWindow::appid=输入你申请的id;QString MainWindow::salt="1435660288";QString MainWindow::password = 输入你申请的password;

  3. 定义请求成功后的槽函数并在cpp文件中自行实现:
    public slots:    void replyFinished(QNetworkReply *);

  4. 拼接百度翻译pai请求内容:
        q = word;  //word为要翻译的单词    QString url;    sign = md5(appid+q+salt+password);//自定义md5函数,该函数返回加密后的字符串,使用qt自动md5加密类    url = API + "q=" + q + "&from="+ from +"&to=" + to + "&appid=" + appid +"&salt=" +  salt + "&sign=" + sign;    manager = new QNetworkAccessManager(this);    connect(manager,&QNetworkAccessManager::finished,this,&MainWindow::replyFinished);    manager->get(QNetworkRequest(QUrl(url.toUtf8())));//发送请求
  5. 在自定义槽函数中解析返回数据:
    void MainWindow::replyFinished(QNetworkReply *reply){    QString all = reply->readAll();    qDebug()<<all;    QJsonParseError jsonError;    QJsonDocument json = QJsonDocument::fromJson(all.toUtf8(),&jsonError);    if (jsonError.error == QJsonParseError::NoError){        if (json.isObject()){            QJsonObject rootObj = json.object();            if(rootObj.contains("trans_result")){                   QJsonValue resultValue = rootObj.value(QString("trans_result"));                   qDebug()<<resultValue;                   QString mean = "";                   QJsonArray array = resultValue.toArray();                   for(int i = 0;i < array.size();i++){                       QJsonObject explains = array.at(i).toObject();                       if(explains.contains("dst")){                           QJsonValue dst = explains.value(QString("dst"));                           qDebug()<<dst.toString();                           mean = mean + dst.toString();                       }                   }                   qDebug()<<mean;//输出翻译结果            }        }    }    reply->deleteLater();}

本例配合Qt图形界面使用,完整代码不便贴出,有问题欢迎讨论。

原创粉丝点击