如何使用带有用户名和密码的curl?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (203)

我需要去访问一个带有用户名/密码的URL。我试着通过curl来访问它,以下为我的访问方式:

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

但是返回了一个error,我需要通过以上命令来指定用户名和密码。

提问于
用户回答回答于
curl -X GET -u username:password  {{ http://www.example.com/filename.txt }} -O
用户回答回答于

我在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’同样也能起到作用。

用户回答回答于

如果你使用的是Gnome keyring应用程序,则可以通过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
用户回答回答于

要让密码最少不会在你的.bash_history中弹出:

curl -u user:$(cat .password-file) http://example-domain.tld
用户回答回答于

要在脚本中安全地传递密码(即防止它以ps auxf或日志显示),可以通过使用-K-标志(从stdin读取配置)和heredoc来完成:

curl --url url -K- <<< "--user user:password"
用户回答回答于

简单地说,最安全的方法就是使用环境变量来存储/检索凭证。curl命令如下:

curl -Lk -XGET -u "${API_USER}:${API_HASH}" -b cookies.txt -c cookies.txt -- "http://api.somesite.com/test/blah?something=123"

然后调用你的restful api,并传递带有API_USERAPI_HASH的Base64编码值的http WWW_Authentication头。 -Lk只是告诉curl遵循http 30x重定向,并使用不安全的tls处理(即忽略ssl错误)。 而double- -只是bash语法来停止处理命令行标志。 此外,-b cookies.txt-c cookies.txt标志处理cookie,使用-b发送cookie和-c本地存储cookie。

认证示例

用户回答回答于

你还可以通过以下方式发送用户名:

curl -u USERNAME http://server.example

curl随后向你获取密码,密码将在屏幕上不可见(或者如果需要复制/粘贴命令的话)。

用户回答回答于
curl http://username:password@api.somesite.com/test/blah?something=123
用户回答回答于

以下的做法更为安全:

curl --netrc-file my-password-file http://example.com

因为在命令行上传递普通的用户/密码字符串并不是一个好的解决方法:

密码文件的格式为man curl

machine host.domain.com login myself password secret

(“”machine“,”login“,和”password‘只是关键词;实际的信息是那些关键字之后的内容)。

用户回答回答于

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

curl -u username http://example.com

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

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

扫码关注云+社区