PHP CURL Headers de réponse non transmis

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP CURL Headers de réponse non transmis

PHP CURL Headers de réponse non transmis

par lulandco » 24 févr. 2014, 18:29

Salut,

J'ai une appli web (un site en joomla 3.2) qui est protégée par un SSO (LemonLdap::NG). Lorsque qu'une requête est envoyée sur une ressource protégée, elle est redirigé vers le portail, l'utilisateur s'authentifie et la réponses est renvoyée sur l'appli web avec des headers de réponses personnalisés dans le $_SERVER tels le mail, le status etc ... (ensuite je me sers de ces headers pour donner l'accès au ressources protégées dans joomla).

J'ai dans l'idée de simplifier un peu tout cela en ecrivant un plugin d'authentification Joomla, cependant je butte déja avec CURL.

Pour l'instant j'arrive à envoyer une requête d'authentification via un formulaire externe comme ceci :

Code : Tout sélectionner

<html> <body onload="document.createElement('form').submit.call(document.getElementById('myForm'))"> <form id="myForm" name="myForm" action="LEMONLDAP_PORTAL_URL" method="POST"> <input type=hidden name="user" value="MY_USERNAME"/> <input type=hidden name="password" value="MY_PASSWORD"/> <input type=hidden name="url" value="PROTECTED_APP_URL64"/> </form> </body> </html>
et le portail fait son travail en renvoyant bien les headers personnalisés configurés dans LemonLdap dans la réponse.

Cependant j'ai besoin de la même chose avec CURL. J'ai essayé ceci
<?php
   $credentials= array('username' => 'MY_USERNAME', 'password' => 'MY_PASSWORD');
   
   $url='LEMONLDAP_PORTAL_URL';
   $vHost='PROTECTED_APP_URL';
   $vHost64=base64_encode($vHost);
   $postData= array('user' => $credentials['username'],
         'password' => $credentials['password'],
         'url' => $vHost64,
         'timezone' => 1);
   
   //create cURL connection
   $ch = curl_init();
   
   //set options
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
   curl_setopt($ch, CURLOPT_COOKIESESSION, true);
   
   //set data to be posted
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
   
   //perform our request
   $result = curl_exec($ch);
   
   //show information regarding the request
   //print_r(curl_getinfo($ch));
   //echo curl_errno($ch) . '-' . curl_error($ch);
   
   //close the connection
   curl_close($ch);
   
   echo $result;
   
?>
L'utilisateur est correctement authentifié dans le manager de session de LemonLdap::NG mais ...

1) lorsque je piste les requêtes et réponses via HTTPFox il n'y a plus la requête POST (pas important du moment que mon utilisateur est bien authentifié au niveau du portail mais y a quand même un truc que je comprends pas ...)
2) Mes headers de réponses personnalisés ne sont plus dans le $_SERVER.

S'agit-il d'un problème de fond (vu ma connaissance limitée des mecanismes HTTP) ou d'un problème de code ?

Merci d'avance.