Использование cURL с именем пользователя и паролем? - PullRequest
396 голосов
/ 07 апреля 2010

Я хочу получить доступ к URL, который требует имя пользователя / пароль.Я хотел бы попробовать получить к нему доступ с помощью curl.Сейчас я делаю что-то вроде:

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

Я получаю ошибку.Я думаю, мне нужно указать имя пользователя и пароль вместе с вышеуказанной командой.

Как я могу это сделать?

Ответы [ 15 ]

600 голосов
/ 07 апреля 2010

Используйте флаг -u для включения имени пользователя, и curl запросит пароль:

curl -u username http://example.com

Вы также можете включить пароль в команду, но тогда ваш пароль будет виден в истории bash:

curl -u username:password http://example.com
213 голосов
/ 12 января 2015

Это безопаснее:

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

... поскольку передача простой строки пользователя / пароля в командной строке - плохая идея.

Формат файла пароля(согласно man curl):

machine <example.com> login <username> password <password>

Примечание:

  1. Имя машины должно , а не включать https:// или подобное!Просто имя хоста.
  2. Слова 'machine', 'login' и 'password' являются просто ключевыми словами;фактическая информация - это материал после этих ключевых слов.
71 голосов
/ 27 июля 2012

Или то же самое, но с другим синтаксисом

curl http://username:password@api.somesite.com/test/blah?something=123
60 голосов
/ 22 января 2014

Вы также можете просто отправить имя пользователя, написав:

curl -u USERNAME http://server.example

Затем Curl запросит у вас пароль, и пароль не будет отображаться на экране (или если вам нужно скопировать / вставить команду).

18 голосов
/ 14 июля 2017

Чтобы безопасно передать пароль в сценарии (т.е. предотвратить его появление с помощью ps auxf или logs), вы можете сделать это с флагом -K- (чтение конфигурации из stdin) и наследованием:

curl --url url -K- <<< "--user user:password"
11 голосов
/ 08 декабря 2017
curl -X GET -u username:password  {{ http://www.example.com/filename.txt }} -O
7 голосов
/ 31 августа 2015

Проще говоря, самым безопасным способом было бы использование переменных среды для хранения / извлечения ваших учетных данных. Таким образом, команда curl вроде:

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

Затем вызовет ваш API apful и передаст заголовок http WWW_Authentication со значениями в кодировке Base64 API_USER и API_HASH. -Lk просто указывает curl следовать перенаправлениям http 30x и использовать небезопасную обработку tls (т.е. игнорировать ошибки ssl). В то время как double -- - это просто синтаксис bash для остановки обработки флагов командной строки. Кроме того, флаги -b cookies.txt и -c cookies.txt обрабатывают файлы cookie, при этом -b отправляет файлы cookie и -c хранит файлы cookie локально.

В руководстве есть примеров аутентификации методов.

7 голосов
/ 15 июля 2015

Чтобы пароль как минимум не появлялся в вашем .bash_history:

curl -u user:$(cat .password-file) http://example-domain.tld
4 голосов
/ 07 февраля 2019

Обычно команда CURL называется

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

, если у вас нет пароля или вы хотите пропустить командную строку для запроса пароля, просто оставьте раздел пароля пустым.

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

4 голосов
/ 05 октября 2018

довольно просто, сделайте следующее:

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