74

如何在 cURL POST 数据中包含 @ 和 & 等特殊字符?我正在尝试传递一个名称和密码,例如:

curl -d name=john passwd=@31&3*J https://www.mysite.com

这将导致@用于加载文件和&指定多个键/值的问题。有什么方法可以逃脱这些角色吗?\@并且\&似乎不起作用。

4

8 回答 8

82

cURL > 7.18.0 有一个选项--data-urlencode可以解决这个问题。使用它,我可以简单地发送一个 POST 请求

curl -d name=john --data-urlencode passwd=@31&3*J https://www.example.com

总结评论,如果我们可以在 Windows 上使用混合的“好”和“坏”数据和感叹号:

curl -d "grant_type=client_credentials&client_id=super-client&acr_values=tenant:TNT123" --data-urlencode "client_secret=XxYyZ21D8E&%fhB6kq^mXQDovSZ%Q*!ipINme"  https://login.example.com/connect/token
于 2012-04-23T11:07:41.680 回答
42

如何使用实体代码...

@ = %40

& = %26

因此,您将拥有:

curl -d 'name=john&passwd=%4031%263*J' https://www.mysite.com

于 2012-04-08T03:17:54.403 回答
16

整个 . 它的双引号(“”)URL

curl "http://www.mysite.com?name=john&passwd=@31&3*J"
于 2014-03-04T10:37:07.850 回答
11

刚刚发现另一种解决方案对我有用。您可以在您的特别款之前使用“\”号。

passwd=\@31\&3*J
于 2017-09-13T13:47:29.630 回答
5

尝试这个:

export CURLNAME="john:@31&3*J"
curl -d -u "${CURLNAME}" https://www.example.com
于 2015-02-17T10:39:33.547 回答
5

如果密码中包含特殊字符,只需用单引号将密码四舍五入即可。

curl -u username:'this|!Pa&*12' --request POST https://www.example.com
于 2021-04-30T00:28:00.887 回答
0

我做了这个

~]$ export A=g

~]$ export B=!

~]$ export C=nger


   curl http://<>USERNAME<>1:$A$B$C@<>URL<>/<>PATH<>/
于 2013-11-19T09:36:34.270 回答
0

这里没有解决我的问题,我们在数据中有一个“&”,它们都只是有效负载中的有效字符,而不是试图逃避任何东西。有任何想法吗?

curl --data-urlencode '{"mrn":"23343","hl7_payload":"MSH|^~&|EPIC|AHS|||20220222113538|LFESTA01|ADT^A08|165616314|P|2.5|||AL |NE","event_type":"ADT^A03","tracking_id":"123432342"}' https://myapi.com

没用,python/flask 仍然返回 404 错误请求。

于 2022-02-22T16:58:38.843 回答