[英]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.