Использование cURL с именем пользователя и паролем?

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

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  login  password  

(Слова « machine », « login » и « password – это просто ключевые слова, фактическая информация – это материал после этих ключевых слов).

Или одно и то же, но различный синтаксис

 curl http://username:[email protected]/test/blah?something=123 

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

 curl -u USERNAME http://server.example 

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

Чтобы безопасно передать пароль в скрипте (т. Е. Не показывать его с помощью ps auxf или журналов), вы можете сделать это с помощью флага -K- (read config from stdin) и heredoc:

 curl --url url -K- <<< "--user user:password" 

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

 curl -u user:$(cat .password-file) http://example-domain.tld 

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

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

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

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

 curl -X GET -u username:password {{ http://www.example.com/filename.txt }} -O 

Если вы используете систему с приложением 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 

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

 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

У меня была такая же потребность в 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' ... будет хорошо.

Я был бы рад, если комментарий или редактирование могут объяснить, почему!

Другие ответы предложили netrc указать имя пользователя и пароль, основываясь на том, что я прочитал, я согласен. Вот некоторые подробности синтаксиса:

https://ec.haxx.se/usingcurl-netrc.html

Как и другие ответы, я хотел бы подчеркнуть необходимость обратить внимание на безопасность в отношении этого вопроса.

Хотя я не эксперт, я нашел эти ссылки проницательными:

https://ec.haxx.se/cmdline-passwords.html

Обобщить:

Использование зашифрованных версий протоколов (HTTPS и HTTP) (FTPS и FTP) может помочь избежать утечки сети.

Использование netrc может помочь избежать утечки командной строки.

Чтобы сделать шаг дальше, кажется, вы также можете шифровать файлы netrc, используя gpg

https://brandur.org/fragments/gpg-curl

При этом ваши учетные данные не «покоятся» (хранятся) как обычный текст.

Interesting Posts

Соответствует ли лицензионное соглашение?

Программа для изменения размера любого окна до определенного размера (например, 800×600, 1024×768 ..)?

Когда использовать блоки try / catch?

Как я могу полностью удалить, а затем переустановить Meteor.js?

Есть ли способ .NET перечислять все доступные сетевые принтеры?

Существуют ли специальные батареи для чистых синусоидных ИБП? Нужен ли мне конкретный тип батареи ИБП?

jQuery Ajax звонки на веб-службу кажутся синхронными

Как изменить значение по умолчанию для совместного использования экрана / номера порта VNC в Mac OS X?

Сокращение пиратства приложений iPhone

Перенос Rails для таблицы join_and_belongs_to_many join

Какое лучшее приложение для нескольких мониторов для Windows 7?

Нужно ли удалять HttpClient и HttpClientHandler?

Как запустить звездочку за VPN?

Разделители в MySQL

Плата за комиссию составляет 100%, но физическая память составляет всего 60% при использовании файла страницы

Давайте будем гением компьютера.