Russian Qt Forum
Ноябрь 23, 2024, 11:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager::get() Segmentation fault при загрузке https  (Прочитано 8413 раз)
vbi
Гость
« : Ноябрь 30, 2013, 22:51 »

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

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

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

Пробовал перед этим создавать QSslSocket и получать sslErrors - возвращает пустой список ошибок.
Записан
Bepec
Гость
« Ответ #1 : Ноябрь 30, 2013, 23:34 »

Создай объект менеджера перед обращением как вариант.

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

Более четкие ответы при виде кода только могут изданы быть.
« Последнее редактирование: Ноябрь 30, 2013, 23:42 от Bepec » Записан
vbi
Гость
« Ответ #2 : Декабрь 01, 2013, 18:54 »

Вот, написал простейшую программу. При нажатии кнопки грузим сайт с https:

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

В результате сразу получаем ошибку:


Как мне обработать такую ошибку самой программой и вывести пользователю сообщение, что необходимо переустановить OpenSSL?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Декабрь 01, 2013, 18:58 »

Как мне обработать такую ошибку самой программой и вывести пользователю сообщение, что необходимо переустановить OpenSSL?
Попробовать резольвить указанные функции самому и если их нет, то говорить пользователю.
См. QLibrary
Записан
vbi
Гость
« Ответ #4 : Декабрь 01, 2013, 19:03 »

А как мне проверить, можно ли грузить https? какую булевую функцию использовать, которая скажет да или нет? Или только с помощью try?
Записан
Bepec
Гость
« Ответ #5 : Декабрь 01, 2013, 19:07 »

красавец. А в каком файле у вас происходит эта фиготень? А то у вас окошко с ошибкой очень информативно закрыло эту информацию Улыбающийся

Записан
vbi
Гость
« Ответ #6 : Декабрь 01, 2013, 19:31 »

ssleay32.dll
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Декабрь 01, 2013, 22:19 »

А как мне проверить, можно ли грузить https? какую булевую функцию использовать, которая скажет да или нет? Или только с помощью try?

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

P.S. И прикрепи сюда проект целиком.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Декабрь 01, 2013, 22:46 »

Таскай с собой нужную либу и все должно быть нормально.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vbi
Гость
« Ответ #9 : Декабрь 01, 2013, 23:07 »

QSslSocket::supportsSsl() возвращает True
Знать бы ее, ту либу
Выложил: https://drive.google.com/folderview?id=0B-vsGwbR_oY8NFVRUmpWLVZST2s&usp=sharing
Записан
vbi
Гость
« Ответ #10 : Декабрь 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
Как-то она определяет что все плохо...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Декабрь 01, 2013, 23:13 »

Знать бы ее, ту либу

ssleay32.dll и libeay32.dll
Записан
Majestio
Гость
« Ответ #12 : Декабрь 01, 2013, 23:28 »

Таскай с собой нужную либу и все должно быть нормально.

Более того - это нужно делать обязательно!
Вариант, что на целевом компе эта либа есть, и она нужной сборки - мизерный.
Для своего "комплекта" я собрал и включил в состав своих библиотек, которые таскаю с построенными приложениями.
Записан
vbi
Гость
« Ответ #13 : Декабрь 01, 2013, 23:33 »

Скачал последнюю версию OpenSSL, кинул библиотеки ssleay32.dll и libeay32.dll в папку с прогой - заработало, ошибки больше нет!
Спасибо Majestio, Alex Custov и Пантер!
Наверно это будет самое лучшее решение - не выводить сообщение пользователю, а просто решить проблему))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.