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查看进程和已知端口是否启动
    plsql安装
    windows中用批处理文件删除n天前的文件
    阿里云服务器25邮件端口问题
    通过rpm安装crontab
    [RHEL7.1]关闭防火墙及SElinux
    有了 itchat, python 调用微信个人号从未如此简单(新增 py3 支持)
    Linux中tty、pty、pts的概念区别
    不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题
    Hadoop 2.7.3 安装配置及测试
  • 原文地址:https://www.cnblogs.com/lidabo/p/4159594.html
Copyright © 2011-2022 走看看