Qt QNetworkRequest因大标头、ssl安全性和身份验证而失败
我正试图通过https连接发送一些JSON和QNetworkRequest,并进行身份验证。任何一种情况都可以正常工作 1.收割台的尺寸非常小 2.没有身份验证 我的Web服务器是JBoss 4.2.3,我无法升级,因为我正在使用,而我的Qt版本是4.7。下面是一个适用于我的代码示例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";
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推出自己的。