LINUX.ORG.RU

QNetworkAccessManager: скачивание файла по HTTPS с сайта с самоподписанным сертификатом

 , ,


0

1

Тестирую свой Downloader-виджет, использующий QNetworkAccessManager.

И обратил внимание, что он не может скачать файл по HTTPS с хабрастраджа, например, вот такой:

https://habrastorage.org/files/28a/a2f/a47/28aa2fa47fd5411c8bb615a381fd5e6a.jpg

При этом с ЛОРа по HTTPS скачивает нормально:

www.linux.org.ru/gallery/12279480-icon.jpg

wget мне показал, что habrastorage.org имеет самоподписанный сертификат.

Во время работы с любым из вышеприведенных линков, виджет выдает такую ошибку в консоль:

qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method

Но в случае ЛОРа файл скачивается, а в случае хабрастораджа приходит ткой ответ:
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

Для отладки я сделал небольшой пример:

http://rghost.ru/8gxlBNYzz (4.3 Кб)

К сожалению, я плохо разбираюсь в этих HTTPS и сертификатах. Подозреваю, что нужно настроить экземпляр QNetworkRequest в методе startNextDownload() путем установки setSslConfiguration().

Может быть поможет тот факт, что, например, в Windows wget с дефолтными настройками не может загрузить файл с хабрастораджа. И помогает опция --no-check-certificate. В Linux wget молча скачивает файл.

Но в методах класса QSslConfiguration не нашел, как устанавливать режим «не проверять SSL сертификат».

Конечная задача - так изменить код примера, чтобы файл с хабрастрораджа начал скачиваться.

★★★★★

Может на хабре просто какая-то хитрая защита от скачивания ботами?

CrossFire ★★★★★ ()

Таки дело не в SSL вообще.

Код не смотрел.

http code - 302

302 Found, 302 Moved Temporarily — запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, при управляемом сервером согласовании содержимого. Некоторые клиенты некорректно ведут себя при обработке данного кода. Введено в HTTP/1.0.

Ссылки к размышлению: 1) https://wiki.qt.io/New_Features_in_Qt_5.6 2) http://stackoverflow.com/questions/14809310/qnetworkreply-and-301-redirect

dhampire ★★★ ()

как устанавливать режим «не проверять SSL сертификат».

Обработать сигнал QNAM::sslErrors(const QList<QSslError> & errors), вызывая в нём QNetworkReply::ignoreSslErrors();

Suigintou ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.