2017-01-07 6 views
3

Я просто пытаюсь отправить GET запрос с использованием HTTP URL, и я получаю эти два SSL Ошибки:QT HTTP Get запрос Ошибка SSL

>  qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams 
>  qt.network.ssl: QSslSocket: cannot call unresolved function DH_free 

Я использую Windows 10 с QtCreator (QT версии 5.8) , и я знаю, что библиотеки SSL не импортируются по QT по умолчанию. Тем не менее, я отправляю HTTP-запрос, а не HTTPS, так почему я должен получать SSL-ошибки?

Вот фрагмент кода производит ошибку: не

void MainWindow::sendGetRequest(QString& url) 
{ 
    QNetworkAccessManager networkManager; 
    QNetworkRequest request; 

    QUrl httpRequest(url); 

    request.setUrl(httpRequest); 
    currentReply = networkManager.get(request); 
    ui->label_2->setText("Request Sent..."); 

    connect(&networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetRequestResult(QNetworkReply*))); 
} 

void MainWindow::onGetRequestResult(QNetworkReply * reply) 
{ 
    if (reply->error() != QNetworkReply::NoError) { 
     ui->label_2->setText("Get Request Error!"); 
     return; 
    } 

    QString data = (QString) reply->readAll(); 
    qDebug() << data; 

} 

Сразу после изменения метки на Request Sent... ошибки выбрасываются и слот onGetRequestResult() не вызывается.

Кроме того, я загрузил два бинарных файла SSL, но это ничего не меняет и есть способ отключить SSL для запроса GET, поскольку мне не нужно его использовать.

Спасибо!

+0

Редактировать ваш вопрос, добавив предыдущий комментарий. – eyllanesc

+0

Вероятно, есть перенаправление на https в ответе HTTP-запроса, и HTTP-стек из Qt следует за ним и пытается добраться до сайта по https по заказу сервера. –

+0

Предположим, что ответ проходит через SSL, но все же как я могу исправить эти ошибки? Если я использую «curl -X Get» url «', он работает отлично. Тем не менее, у меня нет привилегии использовать 'curl' в Windows 10. –

ответ

0

У меня также была та же проблема. Вот решение, которое сработало для меня.

  1. Скачать инсталляционный пакет с этого сайта
    http://slproweb.com/products/Win32OpenSSL.html
  2. Установите его в любое место.
  3. Скопируйте DLL OpenSSL в каталог двоичных файлов OpenSSL (\ bin).
  4. Скопируйте файлы libeay32.dll, libssl32.dll и ssleay32.dll из папки \ bin в то место, где находится QtNetwork4.dll или QtNetworkd4.dll.

Надеюсь, это поможет! :)

-1

networkManager объявлен в

`MainWindow::sendGetRequest()`, 

после выполнения

`sendGetRequest()`, 

networkManager разрушается, то это

finished(QNetworkReply*)

сигнал не будет излучаться.

Вы должны объявить networkManager членом MainWindow. Или рассмотрим хранить его в куче

(auto networkManger = new NetworkManager(this)),

, если она создается только один раз.

0

Ошибка некоторых ошибок QT, если вы используете qt mingw gcc 32bit, скопируйте в исполняемый файл приложения ssleay32.dll и libeay32.dll. В моем случае это: Qt \ Qt5.8.0 \ Tools \ mingw530_32 \ неавтоматического \ Bin \ ssleay32.dll Qt \ Qt5.8.0 \ Tools \ mingw530_32 \ неавтоматического \ Bin \ libeay32.dll

Смежные вопросы