Libcurl fonctionne t'il ?????

Messages postés
274
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
14 septembre 2019
-
Bonjour,

Bonjour,

Je voudrais savoir si les API libcurl fonctionne bien ?

Pas tester.

Il faut reconnaître que c'est pas simple d'encoder decoder SSL


// gethttps.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"

//#include "http_download.hh"
#include <Windows.h>
#include <curl/curl.h>
//#include <sstream>
//#include <stdexcept>

//using namespace std;

typedef struct {
 BYTE data[1 * 1024 * 1024];
 DWORD pos;
}TBUF,*PBUF;

TBUF bb;

size_t callback(void* contents, size_t size, size_t nmemb, void* user)
{
 PBUF pb = (PBUF)user;

 size_t sizeIncrease = size * nmemb;
 memcpy(pb->data + pb->pos, contents, sizeIncrease);
 pb->pos += sizeIncrease;
 return sizeIncrease;
}

void download(wchar_t* url, long* responseCode)
{
 //vector<char> data;

 curl_global_init(CURL_GLOBAL_ALL);
 CURL* handle = curl_easy_init();
 curl_easy_setopt(handle, CURLOPT_URL, url);
 curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, callback);
 curl_easy_setopt(handle, CURLOPT_WRITEDATA, &bb);
 curl_easy_setopt(handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
 CURLcode result = curl_easy_perform(handle);
 if (responseCode != nullptr)
  curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, responseCode);
 curl_easy_cleanup(handle);
 curl_global_cleanup();

 if (result != CURLE_OK)
 {
  /*stringstream err;
  err << "Error downloading from URL \"" << url << "\": " << curl_easy_strerror(result);
  throw runtime_error(err.str());*/
 }

 //return move(data);
}


int main()
{
 bb.pos = 0;
 long rcode = 0;
 download((wchar_t*)L"https://www.google.fr/?gws_rd=ssl", &rcode);
 if (bb.pos > 0)
 {
  HANDLE f = CreateFileW(L"test.htm", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
  if (f != INVALID_HANDLE_VALUE)
  {
   DWORD dt = 0;
   WriteFile(f, bb.data, bb.pos, &dt, NULL);
   CloseHandle(f);
  }
 }
}





Ca me retourne tous le temps : CURLE_COULDNT_RESOLVE_HOST !! que internet soit connecté ou pas !!

Pour ceux qui veulent extraire en programmation une page html via https SSL .... désolé !

Merci


Bonne nouvelle : Les codes sources se compile bien sans erreur seulement depuis IDE de visual studio. c'est déjà ca.

Configuration: Linux / Firefox 60.0
Afficher la suite 

4 réponses

Messages postés
8529
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 septembre 2019
423
0
Merci
bonjour, quelle ligne de code te retourne cette erreur?
Commenter la réponse de yg_be
Messages postés
274
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
14 septembre 2019
0
Merci
J'ai compiler libcurl avec les directives de compilations ssl (openssl), en installant openssl depuis https://www.npcglib.org/~stathis/blog/precompiled-openssl/
.
Ca compile.


Je teste :
Et ca me renvoie :

*   Trying 216.58.204.131:443...
* TCP_NODELAY set
* Connected to www.google.fr (216.58.204.131) port 443 (#0)
* ALPN, offering http/1.1
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0



Je perd mon temps ,
apparament il n'existe pas de composant pour télécharger des pages web depuis https.
je n'ai rien trouver sur google.
yg_be
Messages postés
8529
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 septembre 2019
423 -
Commenter la réponse de yann458
Messages postés
274
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
14 septembre 2019
0
Merci
J'ai essayer de recompiler libcurl avec option windows SSPI,
ca à l'air de fonctionner.
Commenter la réponse de yann458
Messages postés
5210
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 septembre 2019
801
0
Merci
Salut yann458,

Evidemment que libcurl "fonctionne".

Si tu utilises OpenSSL, tu dois indiquer à libcurl où se trouve(ent) les certificats dans un format lisible par OpenSSL, avec l'option CURLOPT_CAPATH :

https://curl.haxx.se/libcurl/c/CURLOPT_CAPATH.html

ou alors demander à libcurl de ne pas vérifier la validité des certifcats SSL en mettant CURLOPT_SSL_VERIFYPEER à false https://curl.haxx.se/docs/sslcerts.html

Si tu utilises la Windows SSPI Schannel API, il semblerait que ce soit l'API Windows qui gère la négociation et les certificats et les trouve là où le système Windows les stocke (je ne l'ai jamais utilisée).

Dal
Commenter la réponse de [Dal]