Curl-从文件发送多部分formdata json

Curl-从文件发送多部分formdata json,curl,Curl,我需要通过命令行发送带有curl的POST请求。ContentType需要是multipart/form data 我的有效负载是JSON,但它非常大,所以我不能通过curl直接发送它(参数列表太长)。相反,我需要通过文件要求内容 如果不从文件中获取内容,一切正常 curl "https://domain/endpoint.php" \ -F "jsondata={\"jsonkey\":\"jsonvalue\"};typ

我需要通过命令行发送带有curl的
POST
请求。ContentType需要是
multipart/form data

我的有效负载是JSON,但它非常大,所以我不能通过curl直接发送它(参数列表太长)。相反,我需要通过文件要求内容

如果不从文件中获取内容,一切正常

curl "https://domain/endpoint.php" \
 -F "jsondata={\"jsonkey\":\"jsonvalue\"};type=application/json"
=>

(作为多部分/表单数据发送)

但是当我将相同的(小测试)json放在一个文件中并在curl命令中使用它时。服务器端的结果是不同的

curl "https://domain/endpoint.php" \
 -F "jsondata=@curl_data3.json;type=application/json"
=>

文件(curl_data3.json)只包含
{“jsonkey”:“jsonvalue”}


似乎我只是发送文件本身,而不是文件的内容:-/

HTML表单,多部分/表单数据是为其设计的,它支持多种类型的输入字段,特别是区分“文件上载”的输入字段与其他字段。作为文件的字段包含有关该文件的元数据。请参阅参考RFC7578,尤其是:

对于表示文件内容的[多部分/表单数据的一部分],为 还应使用的“filename”参数提供文件 内容处置标头字段。文件名不是必需的

curl-F field=@file
按照标准实现了这一点,显然您的服务器将其扩展为您得到的json结构

如果使用而不是
curl-F字段=
curl "https://domain/endpoint.php" \
 -F "jsondata=@curl_data3.json;type=application/json"
array(1) {
  ["jsondata"]=>
  array(5) {
    ["name"]=>
    string(15) "curl_data3.json"
    ["type"]=>
    string(16) "application/json"
    ["tmp_name"]=>
    string(14) "/tmp/php5k58m4"
    ["error"]=>
    int(0)
    ["size"]=>
    int(23)
  }
}