536 votes

Comment définir l'en-tête d'autorisation en utilisant cURL

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

488voto

Oli Points 65050

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

Voir la partie 6. Authentification HTTP

Authentification HTTP

L'authentification HTTP est la capacité de dire au serveur votre nom d'utilisateur et votre mot de passe afin qu'il puisse vérifier que vous êtes autorisé à effectuer la requête que vous demande que vous effectuez. L'authentification basique utilisée en HTTP (qui est le type que curl utilise par par défaut) est simple texte ce qui signifie qu'il envoie le nom d'utilisateur et le mot de passe. seulement légèrement obscurcis, mais toujours entièrement lisibles par quiconque renifle le le réseau entre vous et le serveur distant.

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

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

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

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

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

Si votre proxy exige que l'authentification se fasse par 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 que vous omettez le mot de passe curl demandera le mot de passe de manière interactive.

Notez que lorsqu'un programme est exécuté, il est possible de voir ses paramètres en listant les processus en cours d'exécution du système. Ainsi, d'autres utilisateurs peuvent être peuvent voir vos mots de passe si vous les passez en tant qu'options de ligne de de ligne de commande. Il existe des moyens de contourner ce problème.

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

19 votes

@Vixed Cette question ne porte pas explicitement sur PHP. [Quel est le problème avec les résultats de Google ?

2 votes

La question porte sur l'autorisation et non sur l'authentification. Le PO devrait peut-être changer le titre de sa question.

430voto

Tony Points 546

Je l'ajoute pour que vous n'ayez pas à cliquer :

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

ou si vous essayez de faire une authentification par envoi pour OAuth 2 :

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

23 votes

De nombreuses API utilisent désormais des jetons d'autorisation d'en-tête. Le site -H L'option est excellente.

27 votes

Si vous utilisez -u ou --user, Curl codera les informations d'identification en Base64 et produira un en-tête comme celui-ci : -H Authorization: Basic <Base64EncodedCredentials>

0 votes

J'essaie d'ajouter un en-tête d'autorisation avec HMAC-SHA256 Je reçois toujours une erreur d'en-tête d'autorisation manquante

230voto

Steve Tauber Points 962

Les jetons au porteur ressemblent à ceci :

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

8 votes

Et si vous cherchez à faire une autorisation "de base", il suffit de remplacer "porteur" par "de base".

0 votes

J'ai la chose la plus étrange, j'obtiens un "Wrong format of Authorization header" et "HTTP-200". Le serveur accepte donc mon autorisation, mais le format est incorrect ?

72voto

Rao Points 1403

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

19voto

jianpx Points 1395

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

token_str y Authorization doivent être séparées par un espace blanc, sinon le côté serveur n'obtiendra pas le fichier HTTP_AUTHORIZATION l'environnement.

6 votes

C'est faux, si un espace blanc est nécessaire, votre serveur HTTP est défaillant. Vous avez également besoin de deux chaînes, un type et un jeton.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X