cURL POST数据中的@和&等特殊字符

Ber*_*tek 47 post curl

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

curl -d name=john passwd=@31&3*J https://www.mysite.com
Run Code Online (Sandbox Code Playgroud)

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

Ber*_*tek 56

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

curl -d name=john --data-urlencode passwd=@31&3*J https://www.mysite.com
Run Code Online (Sandbox Code Playgroud)

  • 感叹号似乎会导致与 bash 中的历史扩展有关的问题。您可以在每条数据周围使用单引号修复它(例如`--data-urlencode 'password=abc!123'` 或通过转义感叹号`--data-urlencode password=abc\!123`。更多信息: https://unix.stackexchange.com/questions/33339/cant-use-exclamation-mark-in-bash (2认同)

Bia*_*bba 32

如何使用实体代码......

@ = %40

& = %26

所以,你会有:

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


Thu*_*asa 16

双引号("")整个.URL它的工作原理.

curl "http://www.mysite.com?name=john&passwd=@31&3*J"
Run Code Online (Sandbox Code Playgroud)

  • 请求应该是POST,而不是GET. (6认同)

use*_*655 9

刚刚找到另一个对我有用的解决方案。你可以在你的一个特殊之前使用'\'符号。

passwd=\@31\&3*J
Run Code Online (Sandbox Code Playgroud)


Abd*_*eed 8

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

curl -u username:'this|!Pa&*12' --request POST https://www.example.com
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个:

export CURLNAME="john:@31&3*J"
curl -d -u "${CURLNAME}" https://www.example.com
Run Code Online (Sandbox Code Playgroud)

  • 如果感叹号 ("!") 是特殊字符之一,则不起作用。 (3认同)