我已经为我的应用程序实现了发布请求,如下所示:
QNetworkRequest req;
QUrl url = "Http://" + ipaddress + "/goform/executeSomething";
req.setUrl(url);
QHttpMultiPart * postBody = new QHttpMultiPart(QHttpMultiPart::FormDataType, this);
QHttpPart part;
part.setRawHeader("Content-Disposition","form-data; name=\"action\"");
part.setBody("Action");
postBody->append(part);
req.setRawHeader("Authorization","Basic " + credentials);
req.setRawHeader("Content-Type", "multipart/form-data; boundary=" + postBody->boundary());
nam->post(req,postBody);
和信号/槽初始化
this->nam = new QNetworkAccessManager(this);
connect(this->nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
在服务器上,有一个错误会创建错误的 HTML,但操作本身会正确执行(如果调用一次)。由于 POST 响应中的 HTML 错误,QNetworkAccessManager 会多次重试其 POST 请求(通常在 Wireshark 中可以看到 3 或 4 次)。在 Qt 中,replyFinished 仅在 Wireshark 中的最后一次 POST 之后立即到达一次。NetworkReply 包含“连接已关闭”错误。
这里的问题是,当发布的动作连续执行几次时,它会在服务器上做坏事。由于我没有服务器端的访问权限,我正在寻找一个客户端的解决方案,它只会调用一次 POST 方法。是否可以在 QNetworkAccessManager 中设置任何仅允许单个 POST 尝试的参数?或者 Qt 中有没有可以替代的替代品?