web-dev-qa-db-fra.com

Comment définir l'en-tête d'autorisation à l'aide de curl

Comment puis-je passer en-tête d'autorisation en utilisant cURL? (exécutable dans /usr/bin/curl).

319
Vidya

http://curl.haxx.se/docs/httpscripting.html

Voir la partie 6. Authentification HTTP

Authentification HTTP

L'authentification HTTP consiste à indiquer au serveur votre nom d'utilisateur et votre mot de passe afin qu'il puisse vérifier que vous êtes autorisé à effectuer la demande que vous effectuez. L’authentification de base utilisée dans HTTP (le type utilisé par défaut par curl) est plain text based, ce qui signifie qu’il envoie un nom d’utilisateur et un mot de passe légèrement obscurcis, mais toujours parfaitement lisibles par quiconque s’installe sur le réseau entre vous et le serveur distant.

Pour indiquer à curl d'utiliser un utilisateur et un mot de passe pour l'authentification:

curl --user name:password http://www.example.com

Le site peut nécessiter une méthode d’authentification différente (vérifiez les en-têtes renvoyés par le serveur), puis --ntlm, --digest, --negotiate ou même --anyauth peuvent être des options qui vous conviennent.

Parfois, votre accès HTTP est uniquement disponible via l'utilisation d'un proxy HTTP. Cela semble être particulièrement courant dans diverses entreprises. Un proxy HTTP peut nécessiter son propre utilisateur et mot de passe pour permettre au client d'accéder à Internet. Pour spécifier ceux avec curl, exécutez quelque chose comme:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

Si votre proxy requiert que l'authentification soit effectuée à l'aide de la méthode NTLM, utilisez --proxy-ntlm, s'il requiert Digest, utilisez --proxy-digest.

Si vous utilisez l'une de ces options utilisateur + mot de passe mais laissez de côté le mot de passe, curl demandera le mot de passe de manière interactive.

Notez que lorsqu'un programme est exécuté, ses paramètres peuvent être visibles lors de la liste des processus en cours d'exécution du système. Ainsi, d'autres utilisateurs pourront peut-être surveiller vos mots de passe si vous les transmettez en tant qu'options en ligne de commande. Il existe des moyens de contourner cela.

Il convient de noter que si c'est ainsi que fonctionne l'authentification HTTP, de nombreux sites Web n'utilisent pas ce concept lorsqu'ils fournissent des identifiants de connexion, etc. Voir le chapitre Connexion Web ci-dessous pour plus de détails à ce sujet.

340
Oli

Ajoutant simplement pour ne pas avoir à cliquer sur:

curl --user name:password http://www.example.com

ou si vous essayez d'envoyer l'authentification pour OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
257
Tony

Les jetons porteurs ressemblent à ceci:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
134
Steve Tauber

(pour ceux qui recherchent php-curl réponse)

$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);
60
Rao

Cela a fonctionné pour moi:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
47
timj98

Pour HTTP Basic Auth:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

remplacez _your_token_ et l'URL.

14
Devaroop

Faites attention quand vous utilisez: curl -H "Authorization: token_str" http://www.example.com

token_str et Authorization doivent être séparés par un espace, sinon le serveur ne recevra pas l'environnement HTTP_AUTHORIZATION.

12
jianpx

Si vous n'avez pas le jeton au moment de l'appel, vous devrez passer deux appels, un pour obtenir le jeton et l'autre pour extraire le jeton de la réponse, faites attention à

jeton de grep | cut -d, -f1 | cut -d\"-f4

comme c'est la partie qui traite d'extraire le jeton de la réponse.

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()

Après avoir extrait le jeton, vous pouvez utiliser ce dernier pour passer les appels suivants, comme suit.

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 
2
Upul Doluweera