curl命令行POST密码

时间:2015-10-03 19:41:09

标签: forms post curl passwords

我有以下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'

有关如何解决这个问题的任何建议吗?

此致 斯特凡诺

3 个答案:

答案 0 :(得分:0)

在环境变量中设置密码,例如export PASSWD=secret并在--form "password=${PASSWD}"中使用它。

答案 1 :(得分:0)

在我看来,Hans Z.回答使用环境变量是正确的。虽然我可能只是在bash中添加它,但您可以使用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.

另见this anwser