我有以下curl命令,它完全正常:
curl --silent --location -cookie "$COOKIE" --cookie-jar "$COOKIE" \
--form 'username=xxx' --form 'password=yyy' 'http://example.com'
它会在网站http://example.com上发布一个名为username和password的变量名表。
问题是:我不想透明地传递密码。
我还尝试将密码保存在工作目录(chmod 600 passwd)中名为passwd的文件中,并使用以下curl命令(这就是为什么我使用--form而不是--data,这本来是使用明确的密码工作得很好,但是,它不起作用:
curl --silent --location -cookie "$COOKIE" --cookie-jar "$COOKIE" \
--form 'username=xxx' --form 'password=<passwd' 'http://example.com'
有关如何解决这个问题的任何建议吗?
此致 斯特凡诺
答案 0 :(得分:0)
在环境变量中设置密码,例如export PASSWD=secret
并在--form "password=${PASSWD}"
中使用它。
答案 1 :(得分:0)
read
命令,这会提示输入密码而不会在历史记录中显示。
所以用法看起来像这样
$ read -s PASSWD # -s is there so the characters you type don't show up
$ curl --silent --location -cookie "$COOKIE" --cookie-jar "$COOKIE" \
--form 'username=xxx' --form "password=${PASSWD}" 'http://example.com'
更新:
评论中的另一个解决方案是使用curl
的{{1}}参数。
引用联机帮助页:
名@文件名 这将使卷曲加载来自给定文件的数据(包括任何换行符),对该数据进行URL编码并在POST中传递它。
最后的命令看起来像
--data-urlencode name@filename
答案 2 :(得分:0)
在命令行中传递机密是不安全的,因为它们在进程列表中可用。
您应该使用 --data-urlencode name@filename
方法
This will make curl load data from the given file
(including any newlines), URL-encode that data and
pass it on in the POST.
或 -K, --config <file>
Specify a text file to read curl arguments from. The
command line arguments found in the text file will be used
as if they were provided on the command line.