Libcurl fonctionne t'il ?????

yann458 Messages postés 455 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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

4 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, quelle ligne de code te retourne cette erreur?
0
yann458 Messages postés 455 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
0
yann458 Messages postés 455 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayer de recompiler libcurl avec option windows SSPI,
ca à l'air de fonctionner.
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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.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.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
0