Відповіді:
http://curl.haxx.se/docs/httpscripting.html
Див. Частину 6. Автентифікація HTTP
Аутентифікація HTTP
Аутентифікація HTTP - це можливість повідомити серверу своє ім’я користувача та пароль, щоб він міг підтвердити, що вам дозволяється робити запит, який ви робите. Основна автентифікація, що використовується в HTTP (типовий тип curl використовується за замовчуванням), заснована на простому тексті , а це означає, що вона надсилає ім’я користувача та пароль лише злегка затуманеними, але все ще повністю читаються всіма, хто нюхає в мережі між вами та віддаленим сервером.
Щоб сказати curl, щоб використовувати користувача та пароль для аутентифікації:
curl --user name:password http://www.example.com
На сайті може знадобитися інший метод аутентифікації (перевірте заголовки, повернені сервером), і тоді --ntlm, --digest, --negotiate або навіть --anyauth можуть бути варіанти, які вам підходять.
Іноді ваш доступ до HTTP доступний лише за допомогою HTTP-проксі. Це, здається, особливо часто зустрічається в різних компаніях. Проксі-сервер HTTP може вимагати власного користувача та пароля, щоб клієнт мав змогу пройти через Інтернет. Щоб вказати ті, хто має curl, запустіть щось на кшталт:
curl --proxy-user proxyuser:proxypassword curl.haxx.se
Якщо ваш проксі вимагає, щоб автентифікацію було виконано методом NTLM, використовуйте --proxy-ntlm, якщо він вимагає використання Digest --proxy-digest.
Якщо ви використовуєте будь-який із цих параметрів користувача + пароль, але не залишаєте частину пароля, curl підкаже про інтерактивний пароль.
Зауважте, що при запуску програми, її параметри можуть бути доступні при перерахуванні запущених процесів системи. Таким чином, інші користувачі можуть переглядати ваші паролі, якщо ви передасте їх як прості параметри командного рядка. Є способи цього обійти.
Варто зазначити, що хоча так працює HTTP-аутентифікація, дуже багато веб-сайтів не використовуватимуть цю концепцію, коли вони здійснюють вхід тощо. Детальнішу інформацію щодо цього див. У розділі Веб-вхід далі.
Просто додайте, щоб вам не довелося переходити через клік:
curl --user name:password http://www.example.com
або якщо ви намагаєтесь надіслати автентифікацію для OAuth 2:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
Варіант великий.
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
завжди отримуючи помилку відсутнього заголовка авторизації
<Base64EncodedCredentials>
як згадано @ тимофіївка-kansaki, ви можете отримати кодоване посвідчення з допомогою команди: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
. Для довідки см stackoverflow.com/questions/16918602 / ...
Токени на носіях виглядають так:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
(для тих, хто шукає відповідь на php-curl )
$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate
$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);
var_dump($response);
Це працювало для мене:
curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
?
Bearer
Bearer
.
Для базового Auth HTTP:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
замінити _your_token_
і URL.
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
генерує основний маркер автентичності.
-H "Authorization: Basic <_your_token_>"
робить такий же ефект, як і --user login:password
. Ви можете перевірити цеcurl -v
Будьте уважні, коли використовуєте:
curl -H "Authorization: token_str" http://www.example.com
token_str
і він Authorization
повинен бути розділений пробілом, інакше на стороні сервера не потраплятиме HTTP_AUTHORIZATION
середовище.
Якщо маркер у вас немає під час здійснення дзвінка, вам доведеться здійснити два дзвінки, один - отримати маркер, а другий - вилучити маркер із відповіді, зверніть увагу на
греп-жетон | вирізати -d, -f1 | вирізати -d \ "-f4
оскільки це частина, яка займається вилученням маркера з відповіді.
echo "Getting token response and extracting token"
def token = sh (returnStdout: true, script: """
curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()
Після вилучення маркера ви можете використовувати маркер для наступних дзвінків наступним чином.
echo "Token : ${token[-1]}"
echo "Making calls using token..."
curl -S -i -k -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources