【发布时间】:2021-12-15 14:44:15
【问题描述】:
在网上对这个问题进行了详尽的搜索后,找到的答案都没有解决它。
使用Qt_5_15_2_MSVC2019_64/Microsoft Visual C++ Compiler技术, 我正在尝试通过来自 QNetworkAccessManager 的 HTTP put 请求将 JSON 文件发送到自定义 QTcpServer,但是这样做时,只接收到 HTTP 标头(甚至两次),而不是 JSON 文件本身。
片段代码:
void Sender::putParameters(const QString& p_parameters) {
QJsonDocument docJson = QJsonDocument::fromJson(p_parameters.toUtf8());
QByteArray data = docJson.toJson();
QUrl url= QUrl("http://127.0.0.1:80/api/devices/1285/parameters");
QNetworkAccessManager* nam = new QNetworkAccessManager(this); // Even tried to put as member variable but still did not work
QNetworkRequest networkReq(url);
networkReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
networkReq.setRawHeader("Content-Length", QByteArray::number(data.size()));
QObject::connect(nam, &QNetworkAccessManager::finished, this,
&Sender::validateParameters);
nam->put(networkReq, data);
if(docJson.isEmpty())
qDebug() << "JSON was empty";
}
结果 QTcpServer:
使用 Poco 库没有问题,它可以正常工作,或者通过 Postman 发送 HTTP put 请求也可以正常工作。
【问题讨论】:
-
你能分享你的 QTcpServer 的代码来打印你所描绘的结果吗?想知道您是否未正确检索收据端的请求数据。
-
将 json 从 UTF-8 字符串解析为
QJsonDocument并在将其序列化回 UTF-8 编码字节数组之后的目的是什么?如果您打算检查输入 json 字符串的有效性,那么您实际上并没有这样做:QJsoDocument::fromJson如果解析失败但您不通过调用QJsonDocument::isNull()进行检查,则返回 nullQJsonDocument。可能是您的输入 json 无效,因此序列化 nullQJsonDocument会产生一个空字符串。
标签: qt http networking put qnetworkaccessmanager