zoukankan      html  css  js  c++  java
  • libcurl提交表单上传文件

    不多说了,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;
    }

  • 相关阅读:
    常见的压缩命令
    Linux忘记root密码的解决
    QQFM 中转站(囧转站)OOXX V1.1 by wy811007 (附SkinH_Net的使用) 程序失效 更新1.3版 未发布
    直接插入排序和希尔排序
    SIGABRT错误的调试办法
    UIGestureRecognizer有用文档摘抄
    HTC G14 Sensation Z710e 刷机总结
    iOS 之生命周期(转)
    算法时间复杂度分析基础(转)
    NSURLConnection的同步与异步
  • 原文地址:https://www.cnblogs.com/lidabo/p/4245453.html
Copyright © 2011-2022 走看看