Я пытаюсь отправить JSON с QNetworkRequest через соединение https с аутентификацией. Все работает нормально, если либо
1. Размер заголовка очень маленький
2. Нет аутентификации
Мой веб-сервер - JBoss 4.2.3 (я не могу обновить, потому что я использую dcm4che ), а моя версия 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();
}
Если я изменю запрос на более длинное значение, например «SELECT Patient.Pat_Name, Patient.Pat_birthdate FROM пациента», то я получаю сообщение об ошибке.
Error string = "Ошибка загрузки URL - сервер ответил: версия HTTP не поддерживается"
Номер ошибки = 301 - QNetworkReply :: ProtocolUnknownError
Однако если я удаляю аутентификацию с веб-сервера (и оставляю https), то все работает нормально, независимо от длины строки запроса.
Любая помощь?