curl:-d和--data-binary选项之间的区别是什么?

时间:2017-02-07 03:39:13

标签: javascript angularjs json curl

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

curl "https://mywebsite.com" -d "param1=x" -d "param2=y" -u "3SUHZb0sanKWrQ"

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

curl "https://mywebsite.com" --data-binary $'{ "param1": "x", -d "param2":"y" }' -u "3SUHZb0sanKWrQ"

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

P.S。:第二个请求是我在选择"复制为curl"时得到的卷曲请求。 google chrome上的选项,因为实际请求是angularJS中的$ http.post,其数据有效负载为json对象。我可以在angularJS中做些什么来使其正常工作?

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);
});

谢谢!

1 个答案:

答案 0 :(得分:0)

这是我curl --help所得到的:

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

所以,区别在于发送的-d数据不是二进制内容。