Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut Curl telecharger fichier Excel

    Bonjour à tous,

    Je tente de télécharger un fichier Excel ou Pdf a distance via Curl mais impossible. avez-vous une idée ?

    A la place je reçois du texte spécifiant une erreur : You are being redirected to the authentication virtual host.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include "Wget.h"
     
    Wget::Wget(string url_p, string filename_p) {
        this->url = url_p;
        this->filename = filename_p;
    }
     
    Wget::~Wget() {
    }
     
    void Wget::getFile() {
        FILE * fp;
    	CURL *session;
     
    	session = curl_easy_init();
    	curl_easy_setopt(session, CURLOPT_URL, this->url.c_str() );
    	fp = fopen(this->filename.c_str(), "a");
    	curl_easy_setopt(session,  CURLOPT_WRITEDATA, fp);
    	curl_easy_setopt(session,  CURLOPT_WRITEFUNCTION, fwrite);
    	curl_easy_perform(session);
    	fclose (fp);
    	curl_easy_cleanup(session);
    }

  2. #2
    Expert Confirmé

    Homme Profil pro Fred Kwariz
    Chef de projet en SSII
    Inscrit en
    octobre 2011
    Messages
    887
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred Kwariz
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2011
    Messages : 887
    Points : 3 274
    Points
    3 274

    Par défaut

    Salut,

    il faut positionner CURLOPT_FOLLOWLOCATION à 1 (je crois). cf la doc :

    CURLOPT_FOLLOWLOCATION

    A parameter set to 1 tells the library to follow any Location: header that the server sends as part of a HTTP header.

    This means that the library will re-send the same request on the new location and follow new Location: headers all the way until no more such headers are returned. CURLOPT_MAXREDIRS can be used to limit the number of redirects libcurl will follow.

    Since 7.19.4, libcurl can limit what protocols it will automatically follow. The accepted protocols are set with CURLOPT_REDIR_PROTOCOLS and it excludes the FILE protocol by default.
    sur http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

  3. #3
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut

    ça marche mieux dans le sens ou j'ai un fichier excel plus lourd, mais quand je tente de l'ouvrir ça me dit "fichier corrompu".

    Etrange.

  4. #4
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut

    Arf ça marche toujours pas, je sèche sur le sujet :s

  5. #5
    Expert Confirmé

    Homme Profil pro Fred Kwariz
    Chef de projet en SSII
    Inscrit en
    octobre 2011
    Messages
    887
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred Kwariz
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2011
    Messages : 887
    Points : 3 274
    Points
    3 274

    Par défaut

    Tu ouvres le fichier en mode append ("a" dans le fopen) : est-ce vraiment ce que tu veux ?

  6. #6
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut

    Citation Envoyé par kwariz Voir le message
    Tu ouvres le fichier en mode append ("a" dans le fopen) : est-ce vraiment ce que tu veux ?
    Effectivement erreur de ma part. J'ai changé le "a" par "w".
    Mais ça ne fonctionne pas.

    Je me suis dit que je devrais peut être écrire en binaire donc j'ai ouvert le fichier avec "wb" mais j'ai le meme résultat.

  7. #7
    Expert Confirmé

    Homme Profil pro Fred Kwariz
    Chef de projet en SSII
    Inscrit en
    octobre 2011
    Messages
    887
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred Kwariz
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2011
    Messages : 887
    Points : 3 274
    Points
    3 274

    Par défaut

    Tu as ouvert le fichier pour voir ce qu'il contient ?

  8. #8
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut

    Oui j'ai ouvert le fichier avec notepad++ il contient du contenu illisible.
    Quand je l'ouvre avec Excel j'obtiens un message comme quoi le fichier est corrompu.

    C'est vraiment bizarre.

  9. #9
    Membre du Club
    Inscrit en
    décembre 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 92
    Points : 63
    Points
    63

    Par défaut

    Je sais pas pourquoi mais aujourd'hui ça marche.
    J'ai dut faire une erreur ces derniers jours.

    Merci à tous pour votre aide.

    le code :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void Wget::getFile() {
        FILE * fp;
    	CURL *session;
     
    	session = curl_easy_init();
    	curl_easy_setopt(session, CURLOPT_URL, this->url.c_str() );
    	fp = fopen(this->filename.c_str(), "wb");
    	//curl_easy_setopt(session,  CURLOPT_BINARYTRANSFER, 1);
    	curl_easy_setopt(session,  CURLOPT_FOLLOWLOCATION, 1);
    	curl_easy_setopt(session,  CURLOPT_WRITEDATA, fp);
    	curl_easy_setopt(session,  CURLOPT_WRITEFUNCTION, fwrite);
    	curl_easy_perform(session);
    	fclose (fp);
    	curl_easy_cleanup(session);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •