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

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

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

我该怎么做呢?


当前回答

很简单,做以下几点:

curl -X GET/POST/PUT <URL> -u username:password

其他回答

我在bash (Ubuntu 16.04 LTS)中有同样的需求,答案中提供的命令在我的情况下无法工作。我不得不使用:

curl -X POST -F 'username="$USER"' -F 'password="$PASS"' "http://api.somesite.com/test/blah?something=123"

-F参数中的双引号仅在使用变量时才需要,因此从命令行…-F 'username=myuser'…会没事的。

相关安全注意:正如Mark Ribau先生在注释中指出的那样,此命令在进程列表中显示密码($PASS变量,展开)!

如果你在一个有Gnome密匙环应用程序的系统上,避免直接暴露密码的解决方案是使用gkeyring.py从密匙环中提取密码:

server=server.example.com
file=path/to/my/file
user=my_user_name
pass=$(gkeyring.py -k login -tnetwork -p user=$user,server=$server -1)

curl -u $user:$pass ftps://$server/$file -O
curl -X GET -u username:password  {{ http://www.example.com/filename.txt }} -O

其他回答建议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命令指的是

curl https://example.com\?param\=ParamValue -u USERNAME:PASSWORD

如果您没有任何密码或想跳过命令提示符来要求输入密码,请将密码部分留空。

即curl https://example.com\?param\=ParamValue -u USERNAME: