您的位置:首页 > 其它

libcurl提交表单上传文件

2011-04-06 12:50 218 查看
不多说了,curl的http上传文件代码示例,有需要的可以参考。

int http_post_file(const char *url, const char *user, const char *pwd, const char *filename)

{

assert(url != NULL);

assert(user != NULL);

assert(pwd != NULL);

assert(filename != NULL);

int ret = -1;

CURL *curl = NULL;

CURLcode code;

CURLFORMcode formCode;

int timeout = 15;

#define CHECK_FORM_ERROR(x) /

if ((formCode = (x)) != CURL_FORMADD_OK) /

{ /

fprintf(stderr, "curl_formadd[%d] error./n", formCode); /

goto out; /

}

#define CHECK_SETOPT_ERROR(x) /

if ((code = (x)) != CURLE_OK) /

{ /

fprintf(stderr, "curl_easy_setopt[%d] error./n", code); /

goto all; /

}

struct curl_httppost *post=NULL;

struct curl_httppost *last=NULL;

struct curl_slist *headerlist=NULL;

CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "user",

CURLFORM_COPYCONTENTS, user,

CURLFORM_END));

CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "password",

CURLFORM_COPYCONTENTS, pwd,

CURLFORM_END));

CHECK_FORM_ERROR( curl_formadd(&post, &last, CURLFORM_COPYNAME, "file",

CURLFORM_FILE, filename,

CURLFORM_END));

CHECK_FORM_ERROR( curl_formadd(&post, &last,

CURLFORM_COPYNAME, "submit",

CURLFORM_COPYCONTENTS, "upload",

CURLFORM_END));

curl = curl_easy_init();

if(curl == NULL)

{

fprintf(stderr, "curl_easy_init() error./n");

goto out;

}

CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_HEADER, 0));

CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_URL, url));

CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_HTTPPOST, post));

CHECK_SETOPT_ERROR(curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout));

code = curl_easy_perform(curl);

if(code != CURLE_OK)

{

fprintf(stderr, "curl_easy_perform[%d] error./n", code);

goto all;

}

ret = 0;

all:

curl_easy_cleanup(curl);

out:

curl_formfree(post);

return ret;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: