Jeu en-tête d'Autorisation à l'aide de PHP et curl
Nous sommes à l'aide de la Jonction de la Commission du RESTE du service, qui exige de nous avons envoyé une clé API dans le Authorization
en-tête.
Nous avons mis l'en-tête comme ceci:
$ch = curl_init();
curl_setopt_array($ch, array(
//set url, timeouts, encoding headers etc.
CURLOPT_URL => 'https://....',
//...
));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: ' . CJ_API_KEY,
'User-Agent: ' . OUR_USER_AGENT
));
$response = curl_exec($ch);
$info = curl_getinfo($ch);
Le problème est que le Authorization
en-tête n'est pas envoyé (nous débogage en utilisant une url locale et de faire un var_export($_SERVER)
qui montre une User-Agent
en-tête est réglé, mais pas le Authorization
en-tête.)
Si l'on change le nom d'en-tête de X-Authorization
, il est envoyé - mais cela n'a pas aidé à nous que le service exige expressément l' Authorization
en-tête.
Comment pouvons-nous obtenir PHP + cURL pour envoyer un arbitraire Authorization
- tête?
- Pourquoi, oh pourquoi ce n'est pas dans la valeur de $_SERVER variable?! Incroyable
Vous devez vous connecter pour publier un commentaire.
La
Authorization
en-tête n'est pas inclus dans PHP$_SERVER
variable. Pour bien déboguer une demande, vous devez utiliserapache_request_headers()
qui montre que nous envoyaient lesAuthorization
en-tête exactement comme nous le voulions.Le problème, pour ensuite déterminer exactement ce que de les mettre dans le
Authorization
en-tête donné une assez mauvaise documentation.Lorsque l'en-tête est défini par le client, le
Authorization
-d'en-tête de la requête est incluse dans$_SERVER
— vous ne savez pas si c'est quelque chose de nouveau, mais il est maintenant. HTTP-les en-têtes sont préfixés dans le$_SERVER
tableau avecHTTP_
qui peut être quelque chose que vous avez précédemment ignorées.Aussi,
apache_request_headers()
est une fonction qui n'est définie que lorsque vous utilisez Apache comme serveur web. Donc tout le monde avec nginx etc. est à gauche.Démo
Sur le côté serveur:
Test
Démarrer un serveur web (nécessite PHP 5.4):
Assurez-vous que server.php est dans le répertoire courant.
Utiliser cURL pour tester:
Œuvres. 🙂