Russian Qt Forum

Qt => Работа с сетью => Тема начата: vbi от Ноябрь 30, 2013, 22:51



Название: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Ноябрь 30, 2013, 22:51
При загрузке урла https  с помощью QNetworkAccessManager::get() программа вылетает с ошибкой Segmentation fault. Бектрейс показывает какую-то библиотеку SSL. Проблема устраняется после переустановки OpenSSL.

Вопрос: Как перед выполнением QNetworkAccessManager::get() проверить есть ли ошибки SSL или нет?

Я подключаю сигнал менеджера sslErrors к слоту, но сигнал не отправляется, а сразу Segmentation fault.

Пробовал перед этим создавать QSslSocket и получать sslErrors - возвращает пустой список ошибок.


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Bepec от Ноябрь 30, 2013, 23:34
Создай объект менеджера перед обращением как вариант.

Скорее всего у вас на компьютере имеется несколько версий библиотек SSL и цепляет не ту при сборке.

Более четкие ответы при виде кода только могут изданы быть.


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 18:54
Вот, написал простейшую программу. При нажатии кнопки грузим сайт с https:

Код:
void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    manager->get(QNetworkRequest(QUrl("https://www.fl.ru")));
}

В результате сразу получаем ошибку:
(http://f3.s.qip.ru/yDSsD85h.png)

Как мне обработать такую ошибку самой программой и вывести пользователю сообщение, что необходимо переустановить OpenSSL?


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Old от Декабрь 01, 2013, 18:58
Как мне обработать такую ошибку самой программой и вывести пользователю сообщение, что необходимо переустановить OpenSSL?
Попробовать резольвить указанные функции самому и если их нет, то говорить пользователю.
См. QLibrary


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 19:03
А как мне проверить, можно ли грузить https? какую булевую функцию использовать, которая скажет да или нет? Или только с помощью try?


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Bepec от Декабрь 01, 2013, 19:07
красавец. А в каком файле у вас происходит эта фиготень? А то у вас окошко с ошибкой очень информативно закрыло эту информацию :)



Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 19:31
ssleay32.dll


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Alex Custov от Декабрь 01, 2013, 22:19
А как мне проверить, можно ли грузить https? какую булевую функцию использовать, которая скажет да или нет? Или только с помощью try?

Если весь код проекта написан правильно, то у тебя проблема с твоими SSL библиотеками. try тут не поможет, потому что SIGSEGV - это не исключение. Проверить наличие SSL можно через QSslSocket::supportsSsl(), но если есть проблема с библиотеками, то упасть может и в этом методе.

P.S. И прикрепи сюда проект целиком.


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Пантер от Декабрь 01, 2013, 22:46
Таскай с собой нужную либу и все должно быть нормально.


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 23:07
QSslSocket::supportsSsl() возвращает True
Знать бы ее, ту либу
Выложил: https://drive.google.com/folderview?id=0B-vsGwbR_oY8NFVRUmpWLVZST2s&usp=sharing (https://drive.google.com/folderview?id=0B-vsGwbR_oY8NFVRUmpWLVZST2s&usp=sharing)


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 23:09
Вот при запуске, прога ж выводит как-то сообщения:
Код:
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
QSslSocket: cannot call unresolved function OPENSSL_add_all_algorithms_noconf
Как-то она определяет что все плохо...


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Alex Custov от Декабрь 01, 2013, 23:13
Знать бы ее, ту либу

ssleay32.dll и libeay32.dll


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: Majestio от Декабрь 01, 2013, 23:28
Таскай с собой нужную либу и все должно быть нормально.

Более того - это нужно делать обязательно!
Вариант, что на целевом компе эта либа есть, и она нужной сборки - мизерный.
Для своего "комплекта" я собрал (http://majestio.tk/viewtopic.php?id=10) и включил в состав своих библиотек, которые таскаю с построенными приложениями.


Название: Re: QNetworkAccessManager::get() Segmentation fault при загрузке https
Отправлено: vbi от Декабрь 01, 2013, 23:33
Скачал последнюю версию OpenSSL, кинул библиотеки ssleay32.dll и libeay32.dll в папку с прогой - заработало, ошибки больше нет!
Спасибо Majestio, Alex Custov и Пантер!
Наверно это будет самое лучшее решение - не выводить сообщение пользователю, а просто решить проблему))