Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/09/2015, à 18:34

moi4567

[C/C++] Quote command returned error curl!

Bonjour tous le monde smile

Je travail en ce moment sur un projet de client FTP en C/C++ et pour ça j'utilise la lib curl.
J'ai commencé sur l'upload d'un fichier à partir du fichier ftpupload.c pour en faire une fonction dans un header. J'ai essayé le programme une première fois tel qu'il est fourni, tous c'est bien passé. J'ai transformé la source en question (ftpupload.c) en une fonction et l'or de son exécution je reçois le message d'erreur suivant:

curl_easy_perform() failed: Quote command returned error

.

Sauriez-vous d'où celà peux venir? yikes

Voici la source:

ftpuplaod.h

#ifndef ftpupload
#define ftpupload

#include <stdio.h>
#include <string>
#include <cstring>

#include <curl/curl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
 
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
  curl_off_t nread; 
  size_t retcode = fread(ptr, size, nmemb, (FILE*)stream);
  nread = (curl_off_t)retcode;
  fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
          " bytes from file\n", nread);
  return retcode;
}
 
bool ftp_upload(std::string LOCAL_FILE, std::string UPLOAD_FILE_AS, std::string REMOTE_URL, std::string RENAME_FILE_TO, std::string LOGS)
{
  CURL *curl;
  CURLcode res;
  FILE *hd_src;
  struct stat file_info;
  curl_off_t fsize;

  struct curl_slist *headerlist=NULL;

  std::string buffer =  "RNFR "; buffer += UPLOAD_FILE_AS;
  static const char *buf_1 = buffer.c_str();
  buffer = "RNTO "; buffer += RENAME_FILE_TO;
  static const char *buf_2 = buffer.c_str();
 
  if(stat(LOCAL_FILE.c_str(), &file_info)) {
    printf("Couldnt open '%s': %s\n", LOCAL_FILE.c_str(), strerror(errno));
    return 1;
  }
  fsize = (curl_off_t)file_info.st_size;
 
  printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);
 
  hd_src = fopen(LOCAL_FILE.c_str(), "rb");
 
  curl_global_init(CURL_GLOBAL_ALL);
 
  curl = curl_easy_init();
  if(curl) {
    headerlist = curl_slist_append(headerlist, buf_1);
    headerlist = curl_slist_append(headerlist, buf_2);
    
    curl_easy_setopt(curl, CURLOPT_USERPWD, LOGS.c_str());
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    REMOTE_URL += UPLOAD_FILE_AS;
    curl_easy_setopt(curl,CURLOPT_URL, REMOTE_URL.c_str())  ;
    curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
    curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
    curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                     (curl_off_t)fsize);
 
    res = curl_easy_perform(curl);
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
 
    curl_slist_free_all (headerlist);
    curl_easy_cleanup(curl);
  }
  fclose(hd_src); 
 
  curl_global_cleanup();
  return 0;
}

#endif //ftpupload

main.cpp

#include <iostream>
#include "ftpupload.h"

using namespace std;

int main()
{
	ftp_upload("test.txt", "while-uploading.txt", "ftp://ftp-dfslhfksldfd.alwaysdata.net:21/", "renamed-and-fine.txt", "dfslhfksldfd:Aqwxcvbn");
}

Merci d'avance smile

Hors ligne