Odpowiedzi:
http://curl.haxx.se/docs/httpscripting.html
Patrz część 6. Uwierzytelnianie HTTP
Uwierzytelnianie HTTP
Uwierzytelnianie HTTP to możliwość podania serwerowi nazwy użytkownika i hasła, aby mógł zweryfikować, czy masz możliwość wykonania żądanego żądania. Podstawowe uwierzytelnianie używane w HTTP (domyślnie jest to typ curl) jest oparte na zwykłym tekście , co oznacza, że wysyła nazwę użytkownika i hasło tylko nieznacznie zaciemnione, ale nadal w pełni czytelne dla każdego, kto wącha sieć między tobą a serwerem zdalnym.
Aby powiedzieć curlowi, aby używał użytkownika i hasła do uwierzytelnienia:
curl --user name:password http://www.example.com
Witryna może wymagać innej metody uwierzytelniania (sprawdź nagłówki zwrócone przez serwer), a następnie --ntlm, --digest, --negotiate lub nawet - dowolne opcje mogą być odpowiednie dla Ciebie.
Czasami dostęp do HTTP jest dostępny tylko za pośrednictwem serwera proxy HTTP. Wydaje się to szczególnie powszechne w różnych firmach. Serwer proxy HTTP może wymagać własnego użytkownika i hasła, aby umożliwić klientowi dostęp do Internetu. Aby określić te z zawijaniem, uruchom coś takiego:
curl --proxy-user proxyuser:proxypassword curl.haxx.se
Jeśli twój serwer proxy wymaga uwierzytelnienia przy użyciu metody NTLM, użyj --proxy-ntlm, jeśli wymaga użycia Digest --proxy-digest.
Jeśli użyjesz jednej z tych opcji + hasło użytkownika, ale pominiesz część hasła, curl poprosi o hasło interaktywnie.
Należy pamiętać, że po uruchomieniu programu jego parametry mogą być widoczne podczas wyświetlania listy uruchomionych procesów systemu. Dlatego inni użytkownicy mogą oglądać Twoje hasła, jeśli podasz je jako zwykłe opcje wiersza poleceń. Istnieją sposoby na obejście tego.
Warto zauważyć, że chociaż w ten sposób działa uwierzytelnianie HTTP, bardzo wiele stron internetowych nie będzie używać tej koncepcji, gdy zapewniają loginy itp. Więcej informacji na ten temat znajduje się w rozdziale Logowanie do Internetu.
Po prostu dodajesz, abyś nie musiał klikać:
curl --user name:password http://www.example.com
lub jeśli próbujesz wykonać uwierzytelnianie wysyłania dla OAuth 2:
curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
-H
Opcja jest wielki.
-H Authorization: Basic <Base64EncodedCredentials>
HMAC-SHA256
zawsze pojawia się błąd braku nagłówka autoryzacji
<Base64EncodedCredentials>
, jak wspomniano przez @ tymotki-kansaki można uzyskać poświadczeń kodowane za pomocą polecenia: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com
. W celach informacyjnych patrz stackoverflow.com/questions/16918602/…
Tokeny na okaziciela wyglądają tak:
curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
(dla tych, którzy szukają odpowiedzi 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);
To działało dla mnie:
curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
Authorization: bearer xxxxxxxxx
?
Bearer
Bearer
.
W przypadku uwierzytelniania podstawowego HTTP:
curl -H "Authorization: Basic <_your_token_>" http://www.example.com
zamień _your_token_
i adres URL.
echo -ne "<your-user>:<your-pass>" | base64 --wrap 0
wygeneruje podstawowy token uwierzytelnienia.
-H "Authorization: Basic <_your_token_>"
działa tak samo jak --user login:password
. Możesz to sprawdzić za pomocącurl -v
Uważaj, aby podczas korzystania z:
curl -H "Authorization: token_str" http://www.example.com
token_str
i Authorization
muszą być oddzielone spacją, w przeciwnym razie po stronie serwera nie można uzyskać HTTP_AUTHORIZATION
środowiska.
Jeśli nie masz tokena w momencie wykonywania połączenia, będziesz musiał wykonać dwa połączenia, jedno, aby uzyskać token, a drugie, aby wyodrębnić token z odpowiedzi, zwróć uwagę na
token grep | cut -d, -f1 | cut -d \ "-f4
ponieważ jest to część zajmująca się wydobywaniem tokena z odpowiedzi.
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()
Po wyodrębnieniu tokena można go używać do wykonywania kolejnych połączeń w następujący sposób.
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