使用QT实现http里面的get和post

使用QT实现http里面的get和post_第1张图片

#1024程序员节|参与投稿,赢限定勋章和专属大奖#

#假如你有一台服务器,你最想做哪些事?#

#你被什么样的BUG困扰过一周以上?#

在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意,这些函数不是由编程语言实现的,而是由HTTP协议规定的。因此,无论使用哪种编程语言进行HTTP通信,都可以使用这些函数和响应代码进行发送和接收操作。

请求相关函数:

  1. GET:用于请求指定的资源。
  2. POST:用于向指定资源提交数据,请求服务器进行处理。
  3. PUT:用于更新指定资源的内容。
  4. DELETE:用于删除指定资源。
  5. HEAD:与GET方法类似,但不返回响应体,只获取HTTP头信息。
  6. OPTIONS:用于获取目标资源支持的通信选项。
  7. CONNECT:用于建立网络连接以供隧道传输。
  8. TRACE:用于进行消息回环测试。

响应相关函数:

  1. 200 OK:表示成功响应,请求已成功被处理。
  2. 201 Created:表示成功创建了新资源。
  3. 202 Accepted:表示请求已被接受,继续处理。
  4. 204 No Content:表示成功处理了请求,但无响应体内容。
  5. 301 Moved Permanently:表示资源已被永久移动到新位置。
  6. 302 Found:表示资源已被临时移动到新位置。
  7. 303 See Other:表示由于其他位置的响应可能更适合,建议查看其他位置。
  8. 304 Not Modified:表示请求的资源未被修改,客户端可继续使用缓存的版本。
  9. 400 Bad Request:表示请求格式错误或请求无法被服务器理解。
  10. 401 Unauthorized:表示请求需要身份验证,但未提供认证信息。
  11. 403 Forbidden:表示请求被服务器拒绝,即使提供了认证信息也不允许访问。
  12. 404 Not Found:表示请求的资源不存在。
  13. 500 Internal Server Error:表示服务器内部错误,无法完成请求。
  14. 501 Not Implemented:表示服务器不支持请求的方法。
  15. 502 Bad Gateway:表示作为网关或代理服务器时,服务器从上游服务器接收到的响应是无效的。
  16. 503 Service Unavailable:表示服务器暂时不可用,无法处理请求。

在这里用QT来演示一哈如何使用http协议,获取和传递信息:

具体代码如下所示:

使用QNetworkRequest来实现get

  //生成对应的网络请求
    QNetworkRequest request;
    QString requestHeader = "http://你自己的网址";
    QString fullRequest = requestHeader;
    request.setUrl(QUrl(fullRequest));

    //发送Get请求
    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get(request);
    QEventLoop eventLoop;//开启一个事件,当这个事件接收到完成的信号的时候,就结束循环
    QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit()));
    eventLoop.exec(QEventLoop::ExcludeUserInputEvents);

    //对请求的返回异常进行处理
    if(reply->error() != QNetworkReply::NoError)
    {
        qDebug()<error();
    }

    // 获取http状态码
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    qDebug()<<"状态码:"<readAll();
    QJsonParseError json_error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
    if(json_error.error != QJsonParseError::NoError)
    {
        qDebug()<< "error";
    }
    if(!jsonDoc.isNull()) {
        if(jsonDoc.isObject()) {
            QJsonObject jsonObj = jsonDoc.object();
            int code = jsonObj["code"].toInt();

            qDebug() << "code: " << code;
            return uuid;
        } else {
            qDebug() << "Invalid JSON object";
        }
    } else {
        qDebug() << "Failed to parse JSON";
    }

使用QNetworkRequest来实现post功能

//生成对应的网址请求
    QNetworkRequest request;

    QString fullRequest = "http://你的网址";
    request.setUrl(QUrl(fullRequest));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");//因为QT和java的请求头不一致
    request.setRawHeader(QByteArray("键"), "值");//这里是设置非标准的请求头
    // 查看请求头
    qDebug()<error() != QNetworkReply::NoError)
    {
        qDebug()<< reply->error();
    }
    // 获取http状态码
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    qDebug()<<"状态码:"<readAll();
    QJsonParseError json_error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
    if(json_error.error != QJsonParseError::NoError)
    {
        qDebug()<

在post里面要注意,有的参数需要提交,需要借助QJsonObject转变成 QByteArray。需要注意数据格式的问题,比如数组要转换成json的格式,毕竟C++和java是两种语言。另外,如果要在QT里面使用上述代码,还要记得包含以下的头文件,不然会报错:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

另外,在 Qt 库中,QJsonValue 实际上可以是一种通用的 JSON 数据类型,包括数组和对象。因此,将 QJsonValue 转换为 QJsonArray 并不总是一个明确的过程。然而,如果你确定该 QJsonValue 实际上是一个 JSON 数组,那么可以使用 QJsonValue::toArray() 方法将其转换为 QJsonArray

你可能感兴趣的:(QT,qt,http,java)