IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème d'utilisation de curl_global_init + curl_easy_init() + curl_easy_setopt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 79
    Par défaut Problème d'utilisation de curl_global_init + curl_easy_init() + curl_easy_setopt
    Bonjour, bonjour

    Je suis actuellement en train de réalisé un programme de teste sur une DLL, qui ma était fourni qui date de 2007.

    Donc voila mon problème, j'utilise des fonction de CURL et notamment curl_global_init + curl_easy_init() + curl_easy_setopt et j'ai des petits soucis avec ces fonctions.
    Et j'ai un peut du mal à comprendre à quoi elle servent malgré de nombreuse visite sur GOOGLE ^^ ( http://curl.haxx.se/libcurl/c/curl_easy_setopt.html ou http://curl.haxx.se/libcurl/c/http-post.html) plus certain forum mais je trouve pas une explication claire comme de l'au de roche ^^ et surtout une solution a mon problème.

    Voila mon code sa sera plus parlant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #include "curl\curl.h"
     
    STATUS TEDETIS_E_sendEnvelop(char CHEMIN_FLUX[], char* m_tdt_url,  char* retour)
    {
    	struct curl_httppost *post = NULL;
    	struct curl_httppost *last = NULL;
    	char* ok = NULL;
    	char* next_ok = NULL;
    	char* url = NULL;
    	CURL* handle;
    	int i = 0;
    	int taille = 0;
    	int curl_code = 0;
     
    	int** returnedEnv = 0;
    	char** erreurlist = NULL;
     
     
    	//Calcul de l'URL 
    	url = (char*)malloc(strlen(m_tdt_url) + strlen(PAGE_TRANSACTION) + 1);
    	sprintf(url, "%s%s", m_tdt_url, PAGE_TRANSACTION);
     
    	curl_formadd(&post, &last, CURLFORM_COPYNAME, "enveloppe", CURLFORM_FILE, CHEMIN_FLUX, CURLFORM_FILENAME, "EACT--123456725--20150821-8.tar.gz", CURLFORM_END);
    	curl_formadd(&post, &last, CURLFORM_COPYNAME, "api", CURLFORM_PTRCONTENTS, "1", CURLFORM_END);
     
    	curl_global_init(CURL_GLOBAL_ALL);
     
    	handle = curl_easy_init();
     
    	if (handle)
    	{
    		cout << "TEDETIS_E_sendEnvelop 4\n" << flush;
     
    		curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0);
    		curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 1);
    		curl_easy_setopt(handle, CURLOPT_SSLCERT, "certificat");
    		curl_easy_setopt(handle, CURLOPT_SSLKEY, "pkey");
    		curl_easy_setopt(handle, CURLOPT_URL, url);
    		curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, monwrite);
    		curl_easy_setopt(handle, CURLOPT_WRITEDATA, &retour);
    		curl_easy_setopt(handle, CURLOPT_HTTPPOST, post);
     
    		curl_code = curl_easy_perform(handle);
    		curl_easy_cleanup(handle);
    	}
     
    	curl_global_cleanup();
     
    	taille = strlen(retour) + 1;
    	ok = strtok(retour, "\n");
    	ok = strtok_s(retour, "\n", &next_ok);
     
    	if (!strcmp(ok, "OK")) 
    	{
    		taille = atoi(strtok(NULL, "\n"));
     
    		*returnedEnv = (int*)malloc((taille + 1)*sizeof(int));
    		(*returnedEnv)[0] = taille;
    		for (i = 1; i <= taille; i++) (*returnedEnv)[i] = atoi(strtok(NULL, "\n"));
    	}
    	else 
    	{
    		*erreurlist = (char*)malloc(taille);
    		strcpy(*erreurlist, strtok(NULL, "\0"));
    		return (COM_ENVELOPPE_KO);
    	}
     
    	return(curl_code);
    }
    Et donc mon problème si sa en est bien un c'est que mon programme se compile très bien et se lance mais dès qu'il arrive curl_global_init(CURL_GLOBAL_ALL) le programme plante ou de fois il passe la ligne mais plante juste en dessous.

    Donc je sais pas ce qu'il peut se passer et qu'est ce qui provoque cela....

    Et surtout comment le réglé.

    MERCI d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Ton code s'exécute depuis un thread ? (la documentation de curl précise que curl_global_init n'est pas thread-safe, du coup ça le fait moyen si tu lances ça depuis un thread ).

    Bref l'appel de curl_global_init ne devrait s'effectuer qu'une seule fois au début du programme (et accompagné d'un curl_global_cleanup à la fin pour tout nettoyer une fois que tu n'as plus besoin de curl).

    Sinon faire des curl_formadd avant que curl soit initialisé ça me paraît assez funky comme manière de faire

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 79
    Par défaut
    Citation Envoyé par supersnail Voir le message
    Bonjour,

    Ton code s'exécute depuis un thread ? (la documentation de curl précise que curl_global_init n'est pas thread-safe, du coup ça le fait moyen si tu lances ça depuis un thread ).

    Bref l'appel de curl_global_init ne devrait s'effectuer qu'une seule fois au début du programme (et accompagné d'un curl_global_cleanup à la fin pour tout nettoyer une fois que tu n'as plus besoin de curl).

    Sinon faire des curl_formadd avant que curl soit initialisé ça me paraît assez funky comme manière de faire
    Salut

    Alors si je dit pas de bêtise, mon code ne s’exécute pas dans un thread

    Et pour les curl_formadd c'est vrai que c'est mieux de les faire après l'initialisation de curl.
    Je vais retesté des maintenant et je tien au courant

    Merci déjà pour ton aide

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 79
    Par défaut
    Bon alors j'ai essayer de mettre les curl_formadd dans la boucle if(handle) donc après les curl_global_init(CURL_GLOBAL_ALL) et handle = curl_easy_init() mais absolument aucun résultat sa bloc toujours au niveau de curl_global_init(CURL_GLOBAL_ALL).

    Donc je vous l'ai savoir vu que je code en C++ est ce que on peut utilisé c'est fonctions??? (je voit pas d'objection mais bon )

    Et sachant que ou est fait l'appel des initialisations de CURL, c'est dans une DLL en C++ en DLL MFC et que mon programme de teste de ma DLL est un projet Win32 Application liée à ma DLL.

    Si il manque des précisions n’hésitè pas ou si je suis pas claire dite moi.

    MERCI d'avance

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 79
    Par défaut
    J'ai même tenté de mettre: curl_global_init(CURL_GLOBAL_ALL); au tout début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    STATUS TEDETIS_E_sendEnvelop(char CHEMIN_FLUX[], char* final_name, char* m_tdt_url, /*struct curl_httppost* post,*/ char* retour)
    {
            curl_global_init(CURL_GLOBAL_ALL);
     
    	struct curl_httppost *post = NULL;
    	struct curl_httppost *last = NULL;
    	char* ok = NULL;
    	char* next_ok = NULL;
    	char* url = NULL;
    	CURL* handle;
    	int i = 0;
    	int taille = 0;
    	CURLcode curl_code;
    Mais sa bloc des que sa arrive a curl_global_init(CURL_GLOBAL_ALL) donc quesqui peut bien ce passe.
    J'ai bien include tout les lib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <curl\curl.h>
    #include <curl\curlver.h>
    #include <curl\easy.h>
    #include <curl\mprintf.h>
    #include <curl\multi.h>
    #include <curl\stdcheaders.h>
    #include <curl\types.h>
    Mais la franchement je trouve pas de moyen de réglé ce problème.

    Donc si quelqu'un a la moindre idée je suis opérationnel pour testé

    Ou est ce qu'il existe une autre façon de faire en utilisant d'autre fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
            curl_global_init(CURL_GLOBAL_ALL);
     
    	handle = curl_easy_init();
     
    	if (handle)
    	{
    		curl_formadd(&post, &last, CURLFORM_COPYNAME, "enveloppe", CURLFORM_FILE, (char*)CHEMIN_FLUX, CURLFORM_FILENAME, final_name, CURLFORM_END);
    		curl_formadd(&post, &last, CURLFORM_COPYNAME, "api", CURLFORM_PTRCONTENTS, "1", CURLFORM_END);
     
    		curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0);
    		curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 1);
    		curl_easy_setopt(handle, CURLOPT_SSLCERT, "certificat");
    		curl_easy_setopt(handle, CURLOPT_SSLKEY, "pkey");
    		curl_easy_setopt(handle, CURLOPT_URL, url);
    		curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, monwrite);
    		curl_easy_setopt(handle, CURLOPT_WRITEDATA, &retour);
    		curl_easy_setopt(handle, CURLOPT_HTTPPOST, post);
     
    		curl_code = curl_easy_perform(handle);
    	}
     
    	curl_easy_cleanup(handle);
     
    	curl_global_cleanup();

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 79
    Par défaut
    Et ce que sa se pourrait que j'utilise mal CURL???

    Ou que j'ai pas la bonne version ???

    Ou je sais pas que je sais plus codé


Discussions similaires

  1. [RTFEditorKit] Problème d'utilisation
    Par jean.lamy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/10/2004, 18h30
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  3. [cvs] problèmes d'utilisation
    Par gromite dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h41
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo