Libcurl库使用发送单个文件及多个文件demo
demo:
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <stdlib.h>
#define PERM 0
char * name = "curl.c";
int main()
{
CURL *curl;
CURLcode rcode;
char *url = "192.168.1.100";
char *head_t = "66666666";
char heads[1024];
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headers=NULL; /* init to NULL is important */
sprintf(heads,"head-sky:%s",head_t);
headers = curl_slist_append(headers, heads);
rcode = curl_global_init(CURL_GLOBAL_NOTHING);
if (CURLE_OK != rcode)
goto err1;
curl = curl_easy_init();
if (NULL == curl)
goto err2;
#if PERM == 1
/*设置发送单个文件*/
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME,"sendfile",
CURLFORM_FILE, name,
CURLFORM_END);
#else
/*设置发送多个文件*/
struct curl_forms array[3];
array[0].option = CURLFORM_FILE;
array[0].value = "curl.c";
array[1].option = CURLFORM_FILE;
array[1].value = "1.png";
array[2].option = CURLFORM_END;
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_ARRAY, array,
CURLFORM_END);
#endif
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, name,
CURLFORM_END);
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
//设置发送http头部
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
//设置url
curl_easy_setopt(curl, CURLOPT_URL, url);
//设置http以post方式请求
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
//设置超时时间
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);
//发送数据
rcode = curl_easy_perform(curl);
curl_formfree(formpost);
curl_easy_cleanup(curl);
curl_slist_free_all(headers);
curl_global_cleanup();
return 0;
err2:
curl_global_cleanup();
err1:
return;
}
调试时可使用网络调试助手,创建一个tcp server端,使用80端口,接收http请求。
如此在调试助手上即可看到发送的文件及头部。