Libcurl fonctionne t'il ?????

Fermé
yann458 Messages postés 456 Date d'inscription dimanche 29 mai 2011 Statut Membre Dernière intervention 13 mars 2024 - Modifié le 29 août 2019 à 20:39
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 30 août 2019 à 12:05
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
29 août 2019 à 21:58
bonjour, quelle ligne de code te retourne cette erreur?
0
yann458 Messages postés 456 Date d'inscription dimanche 29 mai 2011 Statut Membre Dernière intervention 13 mars 2024
Modifié le 29 août 2019 à 22:18
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
29 août 2019 à 22:40
0
yann458 Messages postés 456 Date d'inscription dimanche 29 mai 2011 Statut Membre Dernière intervention 13 mars 2024
29 août 2019 à 23:09
J'ai essayer de recompiler libcurl avec option windows SSPI,
ca à l'air de fonctionner.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 30 août 2019 à 12:07
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