curl:-d 和 --data-binary 选项有什么区别?

Edu*_*elo 8 javascript json curl angularjs

我正在尝试向 REST API 发送发布请求。我注意到当我在curl中使用-d选项传递参数时一切正常。例子:

curl "https://mywebsite.com" -d "param1=x" -d "param2=y" -u "3SUHZb0sanKWrQ"
Run Code Online (Sandbox Code Playgroud)

但是,如果将参数作为 json 对象发送并使用 --data-binary,我会从 Api 收到错误(就好像没有收到参数一样)。例子:

curl "https://mywebsite.com" --data-binary $'{ "param1": "x", -d "param2":"y" }' -u "3SUHZb0sanKWrQ"
Run Code Online (Sandbox Code Playgroud)

我认为这两种方法具有相同的行为,但我认为我错了。这两种方法有什么区别?

PS:第二个请求是我在Google Chrome上选择选项时收到的curl请求copy as cURL,因为实际请求是Angular中的$http.post,其数据负载为JSON对象。我可以在 Angular 中做什么来让它工作?

var data = { 
  "param1": "x", 
  "param2": "y" 
};

$http({
    url: "https://mywebsite.com",
    method: 'POST',
    data: data
}).then(function successCallback(response){
    console.log(response);
}, function errorCallback(response){
    console.log(response);
});
Run Code Online (Sandbox Code Playgroud)

RTS*_*lio 12

  • -d @file或者等效地--data @file发送文件,但去掉回车符和换行符(也许还进行字符集转换)
  • --data-binary @file将按原样发送文件
  • --data-raw @file将发送文字字符串“@file”
  • 如果没有初始 @ 符号,所有三个的行为都相同,将以下参数作为文字字符串发送。

application/x-www-form-urlencoded此外,除非您覆盖它,否则所有三个都将 Content-Type 设置为;如果您要发送 JSON,您可能需要设置-H 'Content-Type: application/json'.

我建议,如果您想从命令行发送文字字符串,请使用--data-raw,如果您想发送文件,请使用--data-binary @file


sen*_*rio -4

这就是我得到的curl --help

\n\n
 -d, --data DATA     HTTP POST data (H)\n     --data-raw DATA  HTTP POST data, '@' allowed (H)\n     --data-ascii DATA  HTTP POST ASCII data (H)\n     --data-binary DATA  HTTP POST binary data (H)\n     --data-urlencode DATA  HTTP POST data url encoded (H)\n     --delegation STRING  GSS-API delegation permission\n     --digest        Use HTTP Digest Authentication (H)\n     --disable-eprt  Inhibit using EPRT or LPRT (F)\n     --disable-epsv  Inhibit using EPSV (F)\n     --dns-servers   DNS server addrs to use: 1.1.1.1;2.2.2.2\n     --dns-interface  Interface to use for DNS requests\n     --dns-ipv4-addr  IPv4 address to use for DNS requests, dot notation\n     --dns-ipv6-addr  IPv6 address to use for DNS requests, dot notation\xc2\xa7\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,不同之处在于使用 -d 发送的数据不是二进制内容。

\n

  • 重复已经写过的内容的解释没有帮助。 (13认同)