我正在尝试使用libcurl(在C中)将文件上传到Web服务器。服务器要求我使用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选项是否有问题?