簡體   English   中英

在Qt5中發送JSON文件的POST請求

[英]POST Request for send JSON file in Qt5

我在Qt5的幫助下通過POST請求將JSON文件發送到服務器時遇到了一個小問題。 我給你我的程序的一部分:

#include <iostream>
#include <QCoreApplication>
#include <QFile>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#include <QCommandLineParser>

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);

  QByteArray jsonDocument("{}");

  QUrl url("http://validate.jsontest.com/?json=");
  QNetworkRequest request(url);
  request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

  QNetworkAccessManager manager;
  QNetworkReply* reply = manager.post(request, jsonDocument);

  while(!reply->isFinished()) {
    a.processEvents();
  }

  std::cout << "Ok, Server response : " << response.toStdString() << std::endl;

  return 0;
}

因為這在我必須發送文件的服務器上不起作用,所以我在諸如valide.jsontest.com->的測試服務器上測試了我的代碼,當您將json發送到服務器時,它回答說您的json是有效的或不。

但是用我的實際代碼,我收到以下信息:

Ok, Server response : {
  "error": "A JSONObject text must begin with '{' at 1 [character 2 line 1]",
   "object_or_array": "object",
   "error_info": "This error came from the org.json reference parser.",
   "validate": false
}

因此,如果我使用Curl發送相同的最小json對象{}:

curl -X POST -d "json={}"  http://validate.jsontest.com

邏輯上答案是好的:

{
   "object_or_array": "object",
   "empty": true,
   "parse_time_nanoseconds": 10874,
   "validate": true,
   "size": 0
}

我想我在Qt代碼或POST請求的機制中錯過了一些理解。

(代表OP張貼)

服務器請求通過特定參數發送json文件。 例如,我必須使用參數“ json”在http://www.jsontest.com/服務器上發送JSON文件。 所以我的要求必須是這樣的:

QByteArray jsonDocument("json={\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": {\"minuend\": 42, \"subtrahend\": 23}, \"id\": 3}");

此外,我不得不替換:

request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

通過:

request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

現在,一切都很好:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM