Как загрузить файл с помощью libcurl + POST? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь загрузить файл на веб-сервер, используя libcurl (на языке C). Сервер требует, чтобы я использовал POST, а не PUT (это то, что CURLOPT_UPLOAD будет использовать). Я могу успешно загрузить файл со статусом 200, но когда я загружаю файл с сервера, он пуст. Нет проблем с сервером, так как я проверил POSTMAN, он принимает POST для файла и отправляет файл вместе с контентом при загрузке.

int HttpUploadFile(const char *url, const char *filePath, Buffer 
*response){
  int status;
   CURL *handle;
   FILE *fp;
   struct stat file_info;

   int exist = stat(filePath, &file_info);
   if(exist != 0) {
     ERROR("stat() failed: %s", strerror(errno));
     return -1;
   }

  fp = fopen(filePath, "rb");
   if (fp == NULL) {
      ERROR("fopen() failed for file : %s %s", filePath, 
strerror(errno));
      return -1;
   }

   status = HttpInitHandle(url, &handle);
   if (status != 0) {
      fclose(fp);
      return -1;
   }

   curl_easy_setopt(handle, CURLOPT_URL, url);
   curl_easy_setopt(handle, CURLOPT_READDATA, fp);
   curl_easy_setopt(handle, CURLOPT_POST, 1L);
   curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE,
                    file_info.st_size);
   curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, HttpReceiveCb);
   curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *)response);
   status = HttpSendRequest(handle);
   fclose(fp);
   return status;
}

В HttpSendRequest я добавляю заголовки и отправляю запрос.

Что-то не так с установленными параметрами POST?

...