今天我们介绍一下QT的http请求,这里有post和get两种方式
一、post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定
1 void MainWindow::sendPostRequest()
2 {
3 QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
4 //设置url
5 QString url = "http://10.0.0.20:8005/order/charge";
6 //设置头信息
7 QNetworkRequest requestInfo;
8 requestInfo.setUrl(QUrl(url));
9 requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
10 // requestInfo.setRawHeader("Content-Type","application/json");//服务器要求的数据头部
11 // requestInfo.setRawHeader("Accept","text/json,*/*;q=0.5");//服务器要求的数据头部
12
13 //发送数据
14 QByteArray qByteHttpData = sendJson();
15 QNetworkReply *reply = m_pHttpMgr->post(requestInfo, qByteHttpData);
16 //添加事件循环机制,返回后再运行后面的
17 QEventLoop eventLoop;
18 connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
19 eventLoop.exec(); //block until finish
20
21 //错误处理
22 if (reply->error() == QNetworkReply::NoError)
23 {
24 qDebug() << "request protobufHttp NoError";
25 }
26 else
27 {
28 qDebug()<<"request protobufHttp handle errors here";
29 QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
30 //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
31 qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
32 qDebug(qPrintable(reply->errorString()));
33 }
34
35 //请求收到的结果
36 QByteArray responseByte = reply->readAll();
37 }
二、get请求方式:参数和网址拼接到一起请求
1 void MainWindow::sendGetRequest()
2 {
3 QNetworkAccessManager *m_pHttpMgr = new QNetworkAccessManager();
4 //设置url
5 QString url = "http://10.0.0.20:8005/vending_machine/items/ac83f39ea268";//fae4b325e52c
6 QNetworkRequest requestInfo;
7 requestInfo.setUrl(QUrl(url));
8
9 //添加事件循环机制,返回后再运行后面的
10 QEventLoop eventLoop;
11 QNetworkReply *reply = m_pHttpMgr->get(requestInfo);
12 connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
13 eventLoop.exec(); //block until finish
14 //错误处理
15 if (reply->error() == QNetworkReply::NoError)
16 {
17 qDebug() << "request protobufHttp NoError";
18 }
19 else
20 {
21 qDebug()<<"request protobufHttp handle errors here";
22 QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
23 //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档
24 qDebug( "request protobufHttp found error ....code: %d %d\n", statusCodeV.toInt(), (int)reply->error());
25 qDebug(qPrintable(reply->errorString()));
26 }
27 //请求返回的结果
28 QByteArray responseByte = reply->readAll();
29 qDebug() << responseByte;
30 }
三、主要区别:
get用于请求获取数据,post向指定的资源创建修改数据
get把参数包含在URL中(长度有限制),POST通过请求实体传递参数(安全)
GET |
POST |
|
后退按钮/刷新 |
无害 |
数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
书签 |
可收藏为书签 |
不可收藏为书签 |
缓存 |
能被缓存 |
不能被缓存 |
编码类型 |
application/x-www-form-urlencoded |
application/x-www-form-urlencoded或multipart/form-data.为进制数据使用多重编码 |
历史 |
参数保留在浏览器历史中 |
参数不会保留在浏览器历史中 |
对数据长度的限制 |
是的。当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL 的最大长度是2048个字符) |
无限制 |
对数据类型的限制 |
只允许ASCII字符。 |
没有限制。也允许二进制数据。 |
安全性 |
POST相比,GET的安全性较差,因为所发送的数据是URL的一部分。 在发送密码或其他敏感信息时绝不要使用GET ! |
POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中 |
可见性 |
数据在URL中对所有人都是可见的文章来源:https://www.toymoban.com/news/detail-610888.html |
数据不会显示在URL中文章来源地址https://www.toymoban.com/news/detail-610888.html |
到了这里,关于QT之Http请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!