2017-01-07 2 views
3

단순히 HTTP URL을 사용하여 GET 요청을 보내려고 그리고 난이 두 SSL 오류 점점 오전 :QT HTTP 가져 오기 요청 SSL 오류

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

내가 QTCreator와 윈도우 10을 사용하고을 (QT v5.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 바이너리를 다운로드했지만 변경되지 않으며 사용하지 않아도 GET 요청에 대해 SSL을 사용하지 않도록 설정할 수있는 방법이 있습니다.

감사합니다.

+0

편집 귀하의 질문에 당신의 이전 의견. – eyllanesc

+0

아마도 HTTP 요청의 응답에서 https 로의 리다이렉트가있을 것이고, Qt의 HTTP 스택은 그 요청을 따르고 서버가 요청한대로 https로 사이트에 접근하려고 시도 할 것입니다. –

+0

응답이 SSL을 통과한다고 가정하되 여전히 어떻게 이러한 오류를 수정합니까? 'curl -X Get "url"을 사용하면 잘 동작합니다. 그러나 Windows 10에서'curl '을 사용할 권한이 없습니다. –

답변

0

나는 또한 동일한 문제에 직면했다. 저를 위해 일한 해결책은 여기있다. 이 사이트
http://slproweb.com/products/Win32OpenSSL.html

  • 에서

    1. 다운로드 설치 패키지는 어떤 위치에 설치합니다.
    2. OpenSSL DLL을 OpenSSL 바이너리 (\ bin) 디렉토리에 복사하십시오.
    3. \ bin 폴더에서 libeay32.dll, libssl32.dll 및 ssleay32.dll을 QtNetwork4.dll 또는 QtNetworkd4.dll이있는 동일한 위치로 복사하십시오.

    이 정보가 도움이되기를 바랍니다. :)

  • -1

    networkManager 소멸

    `sendGetRequest()`, 
    

    networkManager 실행 후

    `MainWindow::sendGetRequest()`, 
    

    선언되고, 다음은 출사되지 않는다

    finished(QNetworkReply*)

    신호이다.

    networkManagerMainWindow으로 지정해야합니다. 또는 힙

    (auto networkManger = new NetworkManager(this))에 저장 고려

    그것은 한 번만 생성됩니다.

    0

    qt mingw gcc 32bit를 사용하는 경우 Windows 응용 프로그램 실행 위치 ssleay32.dll 및 libeay32.dll로 복사하는 일부 QT 창은 버그입니다. 제 경우입니다 : 추가하여 Qt는 \ Qt5.8.0 \ 도구 \ mingw530_32 \ 옵트 \ 빈 \의 ssleay32.dll Qt는 \ Qt5.8.0 \ 도구 \ mingw530_32 \ 옵트 \ 빈 \의 않으면 LIBEAY32.dll