You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libcurl构建特性缺失报错:如何创建文件并上传至远程服务器?

问题解决及完整实现方案

一、错误原因与libcurl修复

你遇到的错误是因为当前使用的libcurl库在编译时未启用HTTP表单提交(multipart/form-data)功能,或缺少HTTPS相关依赖。按以下步骤修复:

  • 检查libcurl功能支持:执行命令 curl-config --features,查看输出是否包含 HTTPPOST 和 SSL(若目标URL为HTTPS)。
  • 安装/重新编译libcurl:
    • Debian/Ubuntu系统:安装完整开发包 sudo apt-get install libcurl4-openssl-dev
    • CentOS/RHEL系统:sudo yum install libcurl-devel
    • 手动编译:下载libcurl源码后,执行 ./configure --enable-http --with-openssl && make && make install,确保启用HTTP和SSL功能。

二、完整实现代码

以下代码会先创建指定内容的Temp.wav文件,再通过libcurl以表单形式上传到远程服务器,同时修复了原代码中变量未声明、资源未清理的问题:

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    // 第一步:创建Temp.wav文件并写入指定内容
    FILE *fp = fopen("Temp.wav", "w");
    if (!fp) {
        perror("Failed to create Temp.wav");
        return 1;
    }
    const char *file_content = "1234566890jkjfv";
    fwrite(file_content, sizeof(char), strlen(file_content), fp);
    fclose(fp);

    // 第二步:初始化libcurl相关变量
    CURL *curl = NULL;
    CURLcode res;
    struct curl_httppost *formpost = NULL;
    struct curl_httppost *lastptr = NULL;
    struct curl_slist *headerlist = NULL;
    static const char buf[] = "Expect:";

    // 构建上传文件的表单字段
    curl_formadd(&formpost,
                 &lastptr,
                 CURLFORM_COPYNAME, "sendfile",
                 CURLFORM_FILE, "Temp.wav",
                 CURLFORM_END);

    // 添加文件名字段(若服务器需要接收文件名参数)
    curl_formadd(&formpost,
                 &lastptr,
                 CURLFORM_COPYNAME, "filename",
                 CURLFORM_COPYCONTENTS, "Temp.wav",
                 CURLFORM_END);

    // 添加提交标识字段(按需)
    curl_formadd(&formpost,
                 &lastptr,
                 CURLFORM_COPYNAME, "submit",
                 CURLFORM_COPYCONTENTS, "send",
                 CURLFORM_END);

    // 初始化curl实例
    curl = curl_easy_init();
    headerlist = curl_slist_append(headerlist, buf);

    if(curl) {
        // 设置目标服务器URL(替换为你的实际接收地址)
        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/examplepost.cgi");
        // 禁用Expect头,避免部分服务器兼容性问题
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
        // 设置表单数据
        curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

        // 执行上传请求
        res = curl_easy_perform(curl);

        // 错误处理
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }

        // 清理libcurl资源
        curl_easy_cleanup(curl);
        curl_formfree(formpost);
        curl_slist_free_all(headerlist);
    }

    return 0;
}

三、编译与运行

执行以下命令编译代码(确保已安装libcurl开发包):

gcc upload_file.c -o upload_file -lcurl

编译完成后运行可执行文件:

./upload_file

内容的提问来源于stack exchange,提问作者nagaveni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:50:01