在Qt5的帮助下,将一个JSON文件发送到带有POST请求的服务器有一点问题。我给你一个我的程序:
#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 - &gt;当你将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请求机制中的一段理解。
答案 0 :(得分:0)
(代表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");
现在,一切都很好:)