問題描述
我想訪問一個需要用戶名/密碼的URL。我想嘗試用 curl 來訪問它。現在我正在做一些事情:
curl http://api.somesite.com/test/blah?something=123
我收到一個錯誤。我想我需要指定一個用戶名和密碼以及上述命令。
我怎樣才能做到這一點?
最佳解決方案
使用-u
標志來包含用戶名,並且curl將提示輸入密碼:
curl -u username http://example.com
您也可以在命令中包含密碼,但您的密碼將在bash歷史記錄中顯示:
curl -u username:password http://example.com
次佳解決方案
做得更安全
curl --netrc-file my-password-file http://example.com
…作為傳遞普通用戶/密碼字符串在命令行是一個壞主意。
密碼文件的格式是(根據man curl
):
machine host.domain.com login myself password secret
(“machine
”,“login
”和“password
”都是關鍵字;實際信息是這些關鍵字之后的內容)。
第三種解決方案
您也可以通過寫入發送用戶名:
curl -u USERNAME http://server.example
然后,Curl會詢問您的密碼,密碼將不會顯示在屏幕上(或者您需要復制/粘貼該命令)。
第四種方案
或同樣的事情,但語法不同
curl http://username:password@api.somesite.com/test/blah?something=123
第五種方案
簡單而言,最安全的方式是使用環境變量來存儲/檢索您的憑據。因此一個 curl 命令如:
curl -Lk -XGET -u "${API_USER}:${API_HASH}" -b cookies.txt -c cookies.txt -- "http://api.somesite.com/test/blah?something=123"
然后調用您的休息api並通過API_USER
和API_HASH
的Base64編碼值的http WWW_Authentication
標頭。 -Lk
只是告訴curl遵循http 30x重定向並使用不安全的tls處理(即忽略ssl錯誤)。而雙--
只是bash語法糖停止處理命令行標志。此外,-b cookies.txt
和-c cookies.txt
標志處理Cookie與-b
發送cookie和-c
存儲cookie本地。
本手冊有更多的examples of authentication方法。
第六種方案
讓密碼最小不要彈出你的.bash_history
:
curl -u user:$(cat .password-file) http://example-domain.tld