libcurl提交表单上传文件

简介: 不多说了,curl的http上传文件代码示例,有需要的可以参考。   int http_post_file(const char *url, const char *user, const char *pwd, const char *filename){    assert(url != NU...

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

目录
相关文章
|
消息中间件 程序员 API
Flink中时间和窗口
Flink中时间和窗口
340 0
|
3月前
|
人工智能 前端开发 机器人
10+热门 AI Agent 框架深度解析:谁更适合你的项目?
选型Agent框架不等于追热门!要选真正能跑得稳、适配团队能力与业务需求的框架。架构选错,轻则性能差,重则项目难推进。本文详解10大热门框架对比、5大新兴框架推荐及四步选型法,助你高效落地AI应用。
|
7月前
|
人工智能 运维 自然语言处理
2025保姆级JupyterLab 4.0安装指南|全平台部署+AI编程环境配置
JupyterLab 是下一代交互式计算开发环境,2025年发布的4.0版本新增多语言内核支持(Python/R/Julia/JavaScript一键切换)、实时协作功能、AI辅助编程(集成GPT-5代码补全与错误诊断)和可视化调试器等特性。本文详细介绍其技术定位、跨平台安装方案、安装流程、高阶功能配置、典型应用场景及故障排查指南,帮助用户高效使用JupyterLab进行开发。
|
人工智能 算法 自动驾驶
人工智能的伦理困境与未来展望
本文探讨了人工智能技术发展中遇到的伦理挑战,并对其未来发展趋势进行了预测。文章首先介绍了AI技术的基本原理和应用,然后分析了伴随其发展而来的隐私、就业和决策透明度等问题。最后,提出了对AI未来发展的几点展望,包括技术进步、伦理规范建立和人机合作模式。
479 1
|
存储 弹性计算 编解码
阿里云服务器通用型g8a实例最新收费标准与性能介绍
阿里云ECS通用型g8a服务器采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。ECS通用型g8a实例支持开启或关闭超线程配置,单台g8a实例最高支持100万IOPS。阿里云ECS通用型g8a实例CPU采用AMD EPYCTM Genoa处理器,主频2.7 GHz,睿频最高3.7 GHz,计算性能稳定。本文为大家介绍通用型g8a实例最新收费标准及性能。
阿里云服务器通用型g8a实例最新收费标准与性能介绍
|
机器学习/深度学习 人工智能 边缘计算
边缘智能:边缘计算和人工智能的深度融合
边缘智能:边缘计算和人工智能的深度融合
1088 0
|
SQL 关系型数据库 MySQL
[已解决]com.mysql.cj.jdbc.exceptions. PacketTooBigException: Packet for query is too large (3,456,888
[已解决]com.mysql.cj.jdbc.exceptions. PacketTooBigException: Packet for query is too large (3,456,888
328 0
|
存储 NoSQL 数据库
知识图谱调研-Freebase
介绍 Freebase 是一个由元数据组成的大型合作知识库,内容主要来自其社区成员的贡献。它整合了许多网上的资源,包括部分私人wiki站点中的内容。Freebase 致力于打造一个允许全球所有人(和机器)快捷访问的资源库,由美国软件公司Metaweb开发并于2007年3月公开运营。2010年7月16日被Google收购, 2014年12月16日,Google宣布将在六个月后关闭 Freebase
20129 0
|
缓存 安全 Java
Eureka配置文件详解(上)
Eureka配置文件详解
1050 0
|
存储 SQL 缓存
PostgreSQL 内核解读系列 - 第4节 存储管理(下)
本文整理自阿里云数据库开源社区 Maintainer 于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分: 1. 磁盘管理 2. 空闲空间映射表(FSM) 3. 可见性映射表(VM) 4. 内存管理。
PostgreSQL 内核解读系列 - 第4节 存储管理(下)