Libcurl fonctionne t'il ?????

Signaler
Messages postés
345
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
27 juillet 2020
-
Messages postés
5394
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
31 juillet 2020
-
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

Messages postés
11732
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
4 août 2020
671
bonjour, quelle ligne de code te retourne cette erreur?
Messages postés
345
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
27 juillet 2020

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.
Messages postés
11732
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
4 août 2020
671
Messages postés
345
Date d'inscription
dimanche 29 mai 2011
Statut
Membre
Dernière intervention
27 juillet 2020

J'ai essayer de recompiler libcurl avec option windows SSPI,
ca à l'air de fonctionner.
Messages postés
5394
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
31 juillet 2020
891
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