我想访问一个需要用户名/密码的URL。我想用curl访问它。现在我正在做的事情是:

curl http://api.somesite.com/test/blah?something=123

我得到一个错误。我想我需要在上面的命令中指定用户名和密码。

我该怎么做呢?


当前回答

你可以使用gpg加密的netrc文件与curl像这样:

netrc_file="$HOME/netrc.gpg"
curl --netrc-file <(gpg -d $netrc_file) https://...

其他回答

要在脚本中安全地传递密码(即防止它与ps auxf或logs一起出现),您可以使用- k -标志(从stdin读取配置)和heredoc:

curl --url url -K- <<< "--user user:password"

使用-u标志来包含用户名,curl将提示输入密码:

curl -u username http://example.com

你也可以在命令中包含密码,但你的密码将在bash历史中可见:

curl -u username:password http://example.com

在我的例子中,我需要一个提示符,用户可以输入他们的凭据。

获得用户名和密码提示的最简单方法是以下一行代码:

read -p "Username: " U ; curl -u "$U" <URL> ; unset U

read命令提示输入用户名。-u "$U"参数告诉curl尝试使用用户名$U进行身份验证,并提示输入密码。

作为奖励,密码将只对curl可见,不会在任何日志或历史记录中结束。

curl的手册页有更多关于不同身份验证模式的详细信息: https://curl.se/docs/manpage.html

我也喜欢用户“iammyr”采用的方法。它可以涵盖cURL的身份验证算法失败的情况: https://stackoverflow.com/a/56130884/1239715

其他回答建议netrc指定用户名和密码,根据我所读到的,我同意。下面是一些语法细节:

https://ec.haxx.se/usingcurl-netrc.html

和其他回答一样,我想在这个问题上强调,要注意安全。

虽然我不是专家,但我发现这些链接很有见地:

https://ec.haxx.se/cmdline-passwords.html

总结:

使用加密版本的协议(HTTPS vs HTTP) (FTPS vs FTP)可以帮助避免网络泄漏。

使用netrc可以帮助避免命令行泄漏。

更进一步,似乎还可以使用gpg加密netrc文件

https://brandur.org/fragments/gpg-curl

这样,您的凭据就不会“静止”(存储为纯文本)。

或者同样的东西,但是语法不同

curl http://username:password@api.somesite.com/test/blah?something=123