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

libcurl提交表单上传文件的更多相关文章

  1. 通过ajax提交表单上传文件

    //这是看的大神的.//原地址:https://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html $("#sub" ...

  2. 使用jquery.form.js提交表单上传文件

    方法: 1.formSerilize()  用于序列化表单中的数据,并将其自动整理成适合AJAX异步请求的URL地址格式. 2.clearForm()   清除表单中所有输入值的内容. 3.restF ...

  3. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  4. Express下使用formidable实现POST表单上传文件并保存

    Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...

  5. 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType

    回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...

  6. vue form表单上传文件

    <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...

  7. 使用form表单上传文件

    在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" ...

  8. from 表单上传文件和下载?

    from表单上传单个文件的方法. 分为三个部分,简单演示. 一部分 表单上传文件 <%-- Created by IntelliJ IDEA. User: Administrator Date: ...

  9. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

随机推荐

  1. Ubuntu系统下创建python数据挖掘虚拟环境

    虚拟环境:   虚拟环境是用于创建独立的python环境,允许我们使用不同的python模块和版本,而不混淆.   让我们了解一下产品研发过程中虚拟环境的必要性,在python项目中,显然经常要使用不 ...

  2. 正三角形的外接圆面积,nyoj-274

    正三角形的外接圆面积 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述给你正三角形的边长,pi=3.1415926 ,求正三角形的外接圆面积.   输入 只有一组测试数据 ...

  3. QListWidget与QTableWidget的使用以及样式设置

    QListWidget和QTableWidget的使用和属性,QTableWidget和QListWidget样式表的设置,滚动条的样式设置 一.QListWidget的使用 //一.QListWid ...

  4. Android 自定义PopupWindow动画效果

    public class RollActivity extends Activity { private View view; private Button btn; private PopupWin ...

  5. lostash 正则

     (?:\s+?)  0个或者多个空格

  6. SonarQube代码质量管理平台工具

    1.Sonar轮廓介绍 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量.Sonar 不只是一个质量数据报告工具,更是代码质量管理平台.支持的语言包括:Java.PHP.C#.C ...

  7. hdu 5199 Gunner(STL之map,水)

    Problem Description Long long ago, there is a gunner whose name is Jack. He likes to go hunting very ...

  8. java的静态代理

    解决这个问题:在多个模块要插入一段功能,比方,在不同业务处理模块中,都须要检查用户是否登录,假设不使用代理的话,每添加一个模块,就须要添加非常多代码. 比方,除了推断是否登录,假设还须要添加一个记录日 ...

  9. Android OpenCV实现图片叠加,水印

    关于如何用纯OpenCV实现图片叠加的例子实在是太少,太多的是使用 C++,JNI实现的,如果要用C++的话,我们为啥不转行做C++ 下面的例子基于 Android JavaCV 实现了在im_bea ...

  10. Chrome浏览器切换到之前打开的标签页会重新加载

    这是谷歌的一种策略.当系统内存不足时,系统会自动从内存中舍弃标签页 在地址栏输入chrome://flags/#automatic-tab-discarding,设置为停用即可.