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

curl传递@filename字符串而非文件内容问题咨询(v7.29.0)

问题

尝试使用curl将1M大小的XML文件作为CLOB存储到数据库表中,执行的curl命令为:

curl -X -d p_file=@myfile.xml https://hostname/pls/dad/package.myprocedure

对应的数据库存储过程如下:

procedure myprocedure(p_file IN clob)
is
begin
  insert into mytable (myclob) values (p_file);
end;

实际存入CLOB的是字符串@myfile.xml而非文件内容;但直接传递字面量字符串(如curl -X -d p_file="This is my data" https://hostname/pls/dad/package.myprocedure)时,能正常存入对应内容。当前服务器curl版本为v7.29.0,疑问是:@符号读取文件内容的用法是否在该版本之后才支持?

解答
  1. @语法的版本支持情况
    curl中用@前缀指定文件读取数据的用法,早在远低于7.29.0的版本就已经支持(至少在7.10.x版本就已存在),所以版本不是导致问题的原因。

  2. 问题根源:curl命令参数错误
    你的命令中-X参数后面缺少了请求方法(比如POST),这会导致curl解析参数逻辑混乱。-X是用来指定HTTP请求方法的选项,必须跟方法名配合使用(如-X POST)。当只写-X不加方法时,curl会把后续的-d当作请求方法处理,进而导致p_file=@myfile.xml没有被正确解析为读取文件,而是被当作普通字符串传递。

  3. 正确的curl命令写法
    修正参数顺序,补充完整请求方法:

curl -X POST -d p_file=@myfile.xml https://hostname/pls/dad/package.myprocedure

或者,由于-d参数默认会使用POST方法,也可以省略-X POST,直接写:

curl -d p_file=@myfile.xml https://hostname/pls/dad/package.myprocedure
  1. 验证建议
    如果想确认当前curl版本是否支持该语法,可以执行以下命令测试:
echo "test content" > test.txt
curl -d @test.txt https://httpbin.org/post

查看返回的form数据,若显示文件内容而非@test.txt,则说明版本支持该用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:37:36