我想访问一个需要用户名/密码的URL。我想用curl访问它。现在我正在做的事情是:
curl http://api.somesite.com/test/blah?something=123
我得到一个错误。我想我需要在上面的命令中指定用户名和密码。
我该怎么做呢?
我想访问一个需要用户名/密码的URL。我想用curl访问它。现在我正在做的事情是:
curl http://api.somesite.com/test/blah?something=123
我得到一个错误。我想我需要在上面的命令中指定用户名和密码。
我该怎么做呢?
当前回答
你可以使用命令,
curl -u user-name -p http://www.example.com/path-to-file/file-name.ext > new-file-name.ext
HTTP密码将被触发。
参考: http://www.asempt.com/article/how-use-curl-http-password-protected-site
其他回答
如果你在一个有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命令如下:
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_USER和API_HASH的Base64编码值传递给http WWW_Authentication头。lk只是告诉curl遵循http 30x重定向并使用不安全的tls处理(即忽略ssl错误)。而double——只是bash语法中停止处理命令行标志的糖。此外,-b cookie .txt和-c cookie .txt标记处理cookie, -b发送cookie, -c本地存储cookie。
手册中有更多认证方法的示例。
您应该确定身份验证类型。
如果是摘要认证,http头为:
GET /xxxxxxxxxxx HTTP/1.1
Host: 192.168.3.142
User-Agent: Go-http-client/1.1
Authorization: Digest username="admin", realm="admin@51200304-49-test", nonce="5.1722929000077545", uri="/xxxxxxxxxxx", response="52d30eba90820f2c4fa4d3292a4a7bbc", cnonce="f11900fe0906e3899e0cc431146512bb", qop=auth, nc=00000001
Accept-Encoding: gzip
你可以使用——digest选项:
curl --digest -u 'username:password' 'http://xxxxxxxxxxx'
其他回答建议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
这样,您的凭据就不会“静止”(存储为纯文本)。
要让密码至少不弹出在你的.bash_history:
curl -u user:$(cat .password-file) http://example-domain.tld