Jawaban:
http://curl.haxx.se/docs/httpscripting.html
Lihat bagian 6. Otentikasi HTTP
Otentikasi HTTP
Otentikasi HTTP adalah kemampuan untuk memberi tahu server nama pengguna dan kata sandi Anda sehingga dapat memverifikasi bahwa Anda diizinkan untuk melakukan permintaan yang Anda lakukan. Otentikasi dasar yang digunakan dalam HTTP (yang merupakan tipe penggunaan curl secara default) adalah berbasis teks biasa , yang berarti mengirimkan nama pengguna dan kata sandi hanya sedikit dikaburkan, tetapi masih dapat sepenuhnya dibaca oleh siapa saja yang mengendus jaringan antara Anda dan server jarak jauh.
Untuk memberi tahu curl agar menggunakan pengguna dan kata sandi untuk otentikasi:
curl --user name:password http://www.example.com
Situs ini mungkin memerlukan metode otentikasi yang berbeda (periksa header yang dikembalikan oleh server), dan kemudian --ntlm, --digest, --negotiate atau bahkan --anyauth mungkin merupakan opsi yang cocok untuk Anda.
Terkadang akses HTTP Anda hanya tersedia melalui penggunaan proxy HTTP. Ini tampaknya sangat umum di berbagai perusahaan. Proxy HTTP mungkin memerlukan pengguna dan kata sandi sendiri untuk memungkinkan klien untuk bisa masuk ke Internet. Untuk menentukan mereka yang memiliki ikal, jalankan sesuatu seperti:
curl --proxy-user proxyuser:proxypassword curl.haxx.se
Jika proksi Anda mengharuskan otentikasi dilakukan menggunakan metode NTLM, gunakan --proxy-ntlm, jika itu memerlukan Digest use --proxy-digest.
Jika Anda menggunakan salah satu opsi pengguna + kata sandi ini tetapi tidak memasukkan bagian kata sandi, curl akan meminta kata sandi secara interaktif.
Perhatikan bahwa ketika suatu program dijalankan, parameternya mungkin dapat dilihat saat mendaftar proses yang sedang berjalan dari sistem. Dengan demikian, pengguna lain mungkin dapat menonton kata sandi Anda jika Anda meneruskannya sebagai opsi baris perintah biasa. Ada cara untuk menghindari ini.
Perlu dicatat bahwa sementara ini adalah cara Otentikasi HTTP bekerja, sangat banyak situs web tidak akan menggunakan konsep ini ketika mereka memberikan login dll. Lihat bab Web Login lebih lanjut di bawah ini untuk rincian lebih lanjut tentang itu.
Cukup tambahkan sehingga Anda tidak perlu mengklik:
curl --user name:password http://www.example.com
atau jika Anda mencoba mengirim otentikasi untuk OAuth 2:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
pilihan besar.
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
selalu mendapatkan kesalahan tajuk otorisasi yang hilang
<Base64EncodedCredentials>
seperti yang disebutkan oleh @ timothy-kansaki, Anda bisa mendapatkan encoded credential menggunakan perintah: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
. Untuk referensi, lihat stackoverflow.com/questions/16918602/…
Token pembawa terlihat seperti ini:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
(bagi mereka yang mencari jawaban 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);
Ini bekerja untuk saya:
curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
?
Bearer
Bearer
.
Untuk HTTP Basic Auth:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
ganti _your_token_
dan URL-nya.
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
akan menghasilkan token autentikasi dasar.
-H "Authorization: Basic <_your_token_>"
melakukan efek yang sama dengan --user login:password
. Anda dapat memeriksanya dengancurl -v
Hati-hati saat Anda menggunakan:
curl -H "Authorization: token_str" http://www.example.com
token_str
dan Authorization
harus dipisahkan oleh ruang putih, jika tidak sisi server tidak akan mendapatkan HTTP_AUTHORIZATION
lingkungan.
Jika Anda tidak memiliki token pada saat panggilan dilakukan, Anda harus melakukan dua panggilan, satu untuk mendapatkan token dan yang lainnya untuk mengekstrak token dari respons, perhatikan
grep token | cut -d, -f1 | cut -d \ "-f4
karena itu adalah bagian yang berurusan dengan mengekstraksi token dari respons.
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()
Setelah mengekstrak token, Anda dapat menggunakan token untuk melakukan panggilan berikutnya sebagai berikut.
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