Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ QSslSocket::VerifyNone

Автор: Reklats 20.2.2011, 22:07

Приветствую всех.

Передо мной стоит задача - авторизоваться на защищённом сайте. Basiс авторизация, сертификат самоподписаный. Для этого курил пример http, тем более там это всё есть. Но не тут то было.

Собрал пример (http), захожу на нужный мне сайт, вываливается окно авторизации, потом окно ошибок сертификата и ... Снова окно ошибок, потом снова окно ошибок сертификата и так по кругу. Самое интерессное, при перезапуске примера, авторизация проходит (дело в куках?).

После 3х дней раздумий решил просто отменить проверку сертификата. Но вот как это сделать ? В доках написано, что изменять параметры конфигурации SSL надо до запроса. Сделал так:

void MyClass::startRequest(QUrl *url)
{
    qDebug() << "startRequest :" << trUtf8("Шлю запрос");
    qDebug() << "startRequest : 1)" << reply->sslConfiguration().peerVerifyMode();

    QSslConfiguration sslConfiguration = reply->sslConfiguration();
    sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
    reply->setSslConfiguration(sslConfiguration);

    reply = qnam.get(QNetworkRequest(*url));
    qDebug() << "startRequest : 2)" << reply->sslConfiguration().peerVerifyMode();
}


Компилится нормально, запускается и в консоль вываливается вот это:
slotDownloadButton : "Кнопка нажата" 
startRequest : "Шлю запрос"
Error -
RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly


Я уже и не знаю что делать. Гуглил. Ничего не нашёл.


Автор: Reklats 25.2.2011, 17:10

Как оказалось проблема была в другом - неверная Basic авторизация. Как я выяснил, в примере network\http ошибка ибо не достаточно просто в слот, который запускается в ответ на сигнал о запросе авторизации, поставить нужные имя и пароль. Нужно ещё добавить заголовок "Authorization". Вот пример, не мой, но зато немного посложнее моего. Тут представлена Basic авторизация POST запросом:

QNetworkAccessManager* netMan;
netMan = new QNetworkAccessManager(this);
QNetworkRequest request;


request.setUrl(QUrl("Request Url"));
request.setRawHeader("Authorization", "Basic " + QByteArray(QString("%1:%2").arg("Username").arg("Password").toAscii()).toBase64());

QDateTime currTime = QDateTime::currentDateTime();
QString timeData = currTime.toString("MM/dd/yyyy hh:mm:ss");
QString mySt = status + " " + timeData;
QByteArray myData(mySt.toUtf8(),mySt.length());

QNetworkReply* reply = netMan->post(request,myData);

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)