Qt QNetworkRequest因大标头、ssl安全性和身份验证而失败

Qt QNetworkRequest因大标头、ssl安全性和身份验证而失败,qt,authentication,networking,https,Qt,Authentication,Networking,Https,我正试图通过https连接发送一些JSON和QNetworkRequest,并进行身份验证。任何一种情况都可以正常工作 1.收割台的尺寸非常小 2.没有身份验证 我的Web服务器是JBoss 4.2.3,我无法升级,因为我正在使用,而我的Qt版本是4.7。下面是一个适用于我的代码示例 QVariantMap data; QString query = "SELECT patient.pat_name FROM patient"; data["action"] = "get.worklist";

我正试图通过https连接发送一些JSON和QNetworkRequest,并进行身份验证。任何一种情况都可以正常工作 1.收割台的尺寸非常小 2.没有身份验证

我的Web服务器是JBoss 4.2.3,我无法升级,因为我正在使用,而我的Qt版本是4.7。下面是一个适用于我的代码示例

QVariantMap data;
QString query = "SELECT patient.pat_name FROM patient";
data["action"] = "get.worklist";
data["sql"] = query;
bool success;
// I'm using the QtJson project, which seems to work fine
QByteArray jsonData = QtJson::Json::serialize(data);
if (!success) {
    QString err = "There was a serialization error";
}
QUrl url(/*a valid URL*/);
url.setUserName(/*user*/);
url.setPassword(/*password*/);
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setHeader(QNetworkRequest::ContentLengthHeader, jsonData.size());
request.setRawHeader("params-json", jsonData);

reply = manager.get(request);
connect(reply, SIGNAL(finished()), SLOT(httpFinished()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(httpError(QNetworkReply::NetworkError)));

void ServletConnection::sslErrors(QNetworkReply *reply,const QList<QSslError> &errors) {
    // There were ssl errors
    reply->ignoreSslErrors();
}

void ServletConnection::httpFinished() {
    QString error = reply->errorString();
    int e = reply->error();
    reply->deleteLater();
}
如果我将查询更改为较长的值,例如从患者中选择patient.pat_name、patient.pat_birthdate,则会出现错误。 错误字符串=下载URL时出错-服务器已答复:不支持HTTP版本 错误号=301-QNetworkReply::ProtocolUnknownError 但是,如果我从Web服务器中删除身份验证并保留https,那么无论查询字符串有多长,一切都可以正常工作


有什么帮助吗?

我已经知道怎么做了。我将我的“获取”改为“发布”,现在我可以成功发布任意数量的数据。

您能否分享一个使用manager.post的示例?我很好奇用户名和密码是如何添加的,不管是通过QByteArray.appendusername=???或者,如果您使用QNetworkAccessManager的setRawHeader推出自己的。