java libcurl post参数_使用libcurl POST数据和上传文件

为了具有通用性,将文件的内容读到了fc变量中,fclen是fc的长度。fc也可以是任何其它内容。curl 是 libcurl句柄。演示省略了很多显而易见的步骤。

1. 普通的post请求,这里用curl_easy_escape对fc做了编码

std::string data("req=plain");

data.append("&file=");

char *efc = curl_easy_escape(curl, fc, fclen);

data.append(efc)

curl_free(encoded);

curl_easy_setopt(curl, CURLOPT_URL, PURGE_URL);

curl_easy_setopt(curl, CURLOPT_POST, 1L);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());

curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.size());

2. multipart/formdata请求

struct curl_httppost *formpost = 0;

struct curl_httppost *lastptr  = 0;

curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "reqformat", CURLFORM_PTRCONTENTS, "plain", CURLFORM_END);

curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_PTRCONTENTS, fc, CURLFORM_CONTENTSLENGTH, fclen, CURLFORM_END);

curl_easy_setopt(curl, CURLOPT_URL, URL);

curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

curl_easy_perform(curl);

curl_formfree(formpost);

3. multipart/formdata请求,不把文件读入fc,其它步骤相同

curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "/path/filename", CURLFORM_END);

4. 通过put上传文件

curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

curl_easy_setopt(curl, CURLOPT_PUT, 1L);

curl_easy_setopt(curl, CURLOPT_READDATA, fp);   // FILE *fp = fopen("/path/filename");

curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, fsize);  // fsize = sizeof /path/filename

5. 发送自己的Header

struct curl_slist *slist = 0;

slist = curl_slist_append(slist, "Blog-X-User: username");

slist = curl_slist_append(slist, "Blog-X-Signature: signature");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);

curl_slist_free_all(slist);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用libcurl库进行POST方法上传文件的步骤如下: 1. 初始化curl库:`curl_global_init(CURL_GLOBAL_ALL);` 2. 创建curl句柄:`CURL* curl = curl_easy_init();` 3. 设置请求URL:`curl_easy_setopt(curl, CURLOPT_URL, url);` 4. 设置请求方式为POST:`curl_easy_setopt(curl, CURLOPT_POST, 1L);` 5. 设置上传的文件:`curl_easy_setopt(curl, CURLOPT_READDATA, file);` 其中,`file`为你要上传的文件的文件指针。 6. 设置上传的文件大小:`curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, file_size);` 其中,`file_size`为你要上传的文件的大小。 7. 设置上传的文件名:`curl_easy_setopt(curl, CURLOPT_POSTFIELDS, file_name);` 其中,`file_name`为你要上传的文件的文件名。 8. 执行请求:`curl_easy_perform(curl);` 9. 清理curl句柄:`curl_easy_cleanup(curl);` 完整的示例代码如下: ``` #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; FILE *file; const char *url = "http://example.com/upload.php"; const char *file_name = "example.txt"; long file_size; file = fopen(file_name, "rb"); if (!file) { fprintf(stderr, "Failed to open file '%s'\n", file_name); return 1; } fseek(file, 0L, SEEK_END); file_size = ftell(file); rewind(file); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_READDATA, file); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, file_size); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, file_name); res = curl_easy_perform(curl); if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } fclose(file); curl_global_cleanup(); return 0; } ``` 注意,这只是一个简单的示例,实际应用中还需要添加错误处理和其他必要的选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值