int ur_curl_action(UR_REQUETE_TYPE *urRequete, struct HttpPost *formpost) { INT iRetCode = XZC_OK; CURL *curl; CURLcode res; struct curl_slist *headerlist = NULL; char buf[] = "Expect:"; FILE *fFichierD; TRACE_T(XZC_N2, "-> Curl Action"); /* Demarrage de la session libcurl */ curl = curl_easy_init(); /* Initialisation de l'entete de la page requete */ headerlist = curl_slist_append( headerlist, buf ); if(curl) { /* La requete a effectuer */ curl_easy_setopt( curl, CURLOPT_URL, urRequete->pchURL ); STRACE_T(XZC_N2, "URL de la requete : ", urRequete->pchURL); if( formpost ) { /* Formulaire a poster */ TRACE_T(XZC_N2, "Formulaire detecte"); curl_easy_setopt( curl, CURLOPT_HTTPPOST, formpost ); /* Envoi des donnees recu a la fonction ur_write_file */ curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, ur_write_file ); /* Ouverture du fichier */ TRACE_T(XZC_N2, "Ouverture du fichier pour la reception"); fFichierD = fopen(urRequete->pchFichierD, "w"); if( !fFichierD ) { curl_easy_cleanup( curl ); iRetCode = XZC_NOK; ERROR_T("Ouverture du fichier impossible"); goto FIN_FONCTION; } STRACE_T(XZC_N2, "Fichier ouvert : ", urRequete->pchFichierD); /* Attache du fichier avec write_data */ curl_easy_setopt( curl, CURLOPT_WRITEDATA, fFichierD ); } //else //{ // curl_easy_setopt( curl, CURLOPT_NOBODY, 1); //} /* Pas d'utilisation de signal (env multithread) */ curl_easy_setopt( curl, CURLOPT_NOSIGNAL, 1 ); /* Mode verbose pour le debugage */ curl_easy_setopt( curl, CURLOPT_VERBOSE, 1 ); /* Echec et abandon a la moindre erreur */ curl_easy_setopt( curl, CURLOPT_FAILONERROR, 1); /* Pas de barre de progression */ curl_easy_setopt( curl, CURLOPT_NOPROGRESS, 1 ); /* Pas de commentaire */ curl_easy_setopt( curl, CURLOPT_MUTE, 1 ); /* LANCEMENT DE LA REQUETE */ TRACE_T(XZC_N2, "CURL : EXECUTION DE LA REQUETTE HTTP"); res = curl_easy_perform( curl ); if( formpost ) { /* Fermeture du fichier */ fclose( fFichierD ); } /* Liberation memoire */ curl_easy_cleanup( curl ); /* Liberation memoire */ curl_slist_free_all( headerlist ); if( res ) { iRetCode = XZC_NOK; DERROR_T("Requete terminee anormalement", res); goto FIN_FONCTION; } } FIN_FONCTION: return iRetCode; }