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

如何用C++ cURL构造包含ObjectName的PUT对象请求?

解决cURL PUT请求缺少对象路径的问题

你的问题核心是URL中没有包含要上传的对象路径(/ObjectName),导致cURL生成的请求行没有资源路径,默认操作Bucket而非具体对象。

直接解决方案:修改URL,添加ObjectName

把CURLOPT_URL的地址改成包含对象路径的完整URL,格式为:
https://BucketName.oss-cn-hangzhou.aliyuncs.com/ObjectName

修改后的代码片段:

// 替换成你的Bucket域名+对象路径
curl_easy_setopt(curl, CURLOPT_URL, "https://tva******.oss*****.aliyuncs.com/your-target-object-name");

这样cURL会自动从URL中提取/your-target-object-name作为请求行的资源路径,生成符合预期的PUT /your-target-object-name HTTP/1.1请求。

额外注意事项

  • 特殊字符转义:如果ObjectName包含空格、中文或其他特殊字符,需要用curl_easy_escape进行URL编码,避免请求错误:
char* escaped_obj_name = curl_easy_escape(curl, "你的对象名称(含特殊字符)", 0);
string full_url = "https://tva******.oss*****.aliyuncs.com/" + string(escaped_obj_name);
curl_easy_setopt(curl, CURLOPT_URL, full_url.c_str());
curl_free(escaped_obj_name); // 记得释放内存
  • 移除手动设置的Content-Length:你已经通过CURLOPT_INFILESIZE_LARGE设置了文件大小,cURL会自动生成正确的Content-Length头,手动添加可能导致头信息冲突,建议删除这一行:
// 删掉这行
headerList = curl_slist_append(headerList, ("Content-Length: " + size).c_str());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:33:17