2016-07-20 13 views
1

bekommen Wenn ich von HTTPS mit CodeCurl in C++ - Es kann nicht Inhalt von HTTPS-Antwort erhalten und schreiben Sie es auf die <code>s</code> Variable Daten können nicht von HTTPS

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) 
{ 
    ((std::string*)userp)->append((char*)contents, size * nmemb); 
    return size * nmemb; 
} 

string* NetIO::getUrlContent(string URL) { 

    CURL *curl; 
    CURLcode res; 
    string *s = new string(""); 

    curl = curl_easy_init(); 
    if (curl) { 
     //curl_easy_setopt(curl, CURLOPT_URL, URL);   
     curl_easy_setopt(curl, CURLOPT_URL, "https://ya.ru/"); 
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, s); 
     res = curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 

    } 

    return s; 
} 

zu bekommen Daten versuchen - s enthält "". Aber wenn ich URL zu HTTP ändere - dieser Code funktioniert sehr gut und s enthält HTML-Code der Seite.

curl_easy_setopt(curl, CURLOPT_URL, "http://tatarstan.shop.megafon.ru/"); 

Wie behebt man dieses Problem?

Vielen Dank! ❤

UPDATE: Wenn ich

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 

als mein Code hinzufügen, funktioniert gut. Warum kann es nicht ohne CURLOPT_SSL_VERIFYPEER = 0 funktionieren?

Ich habe einige Visual Studio-Lösung. Es enthält 2 Projekt - libcurl, dass mit Einstellungen zusammengestellt: enter image description here enter image description here enter image description here

und zweites Projekt, das auf Libcurl Projekt abhängt: enter image description here

+0

Welchen Wert hat 'Rückkehr curl_easy_perform'? – hank

+0

I't zurückgegeben CURLE_SSL_CACERT –

Antwort

1

Gelöst! Danke @hank!

Meine Lösung ist:

1) Öffnen Sie Ihre Website in Google Chrome, offene Zertifikat Info.

2) Exportieren Sie es und jedes seiner Elternzertifikate als X.509. Concat-Cert-Dateien in die eine Cert-Datei - machen Sie die Cert-Kette.

3) Verwenden Sie Datei mit cert Kette mit dem Code

curl_easy_setopt(curl, CURLOPT_CAINFO, "c:\\Art\\Projects\\LifeSimLauncher\\MyStaticLib\\lifesim.biz.crt.cer"); 
+0

Erstaunlich! Ich kann endlich erfolgreich HTTPS-Anfragen mit Hilfe von libcurl unter Windows mit Visual Studio! –

-1

Verwendung nach diesem Code:

curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");

+0

Es löst nicht Problem ( –