我想访问一个需要用户名/密码的URL。我想用curl访问它。现在我正在做的事情是:
curl http://api.somesite.com/test/blah?something=123
我得到一个错误。我想我需要在上面的命令中指定用户名和密码。
我该怎么做呢?
我想访问一个需要用户名/密码的URL。我想用curl访问它。现在我正在做的事情是:
curl http://api.somesite.com/test/blah?something=123
我得到一个错误。我想我需要在上面的命令中指定用户名和密码。
我该怎么做呢?
当前回答
要在脚本中安全地传递密码(即防止它与ps auxf或logs一起出现),您可以使用- k -标志(从stdin读取配置)和heredoc:
curl --url url -K- <<< "--user user:password"
其他回答
你也可以这样发送用户名:
curl -u USERNAME http://server.example
然后Curl将要求您输入密码,并且密码将不会在屏幕上显示(或者如果您需要复制/粘贴该命令)。
使用-u标志来包含用户名,curl将提示输入密码:
curl -u username http://example.com
你也可以在命令中包含密码,但你的密码将在bash历史中可见:
curl -u username:password http://example.com
curl -X GET -u username:password {{ http://www.example.com/filename.txt }} -O
在某些API中它可能不起作用(比如rabbitmq)。
还有其他选择:
curl http://username:password@example.com
curl http://admin:123456@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