8791 sujets

Développement web côté serveur, CMS

Bonjour,

après avoir parcouru des dizaines de sites et fait de multiples recherches sur google, je n'ai pas réussi à trouver l'information dont j'ai besoin.

Je voudrai récupèrer un fichier CSV sur un serveur distant qui nécessite d'être authentifié. J'ai alors cherché comment est-il possible de s'identifier directement via les en-têtes HTTP, avec la fonction header() php.
Malheureusement je n'ai trouvé que des informations (qui forment déjà une base), pour créer un système d'authentification, et non pas pour s'identifier.

En fait j'aimerai pouvoir faire quelque chose du genre (mais fonctionnel) :
header("WWW-Authenticate: username: 'user' passwd: 'pass'");


Il me semble avoir compris que le serveur distant, après avoir reçu les informations de l'en-tête HTTP de la part du client, récupère les données via les variables serveur $_SERVER['PHP_AUTH_USER'].

Bref, si vous avez une idée ou un lien à partager pour savoir comment s'identifier via les en-têtes HTTP en php, ça me rendrait bien service.

Merci d'avance Smiley cligne
Modifié par Rasta31 (07 Oct 2007 - 19:10)
Si j'ai bien compris, tu te connectes à un serveur distant, et tu télécharges un fichier sur celui-ci.
Peux-tu donner un peu plus de code pour savoir comment tu t'y prends actuellement pour le récupérer ?
Je voudrais être bien sûr de ce que tu veux.

Est-ce que tu l'ouvres par fopen/fread/fclose, file_get_contents ou procédé similaire ?
Si oui, je crains qu'il faille passer par socket et composer toi-même la requête HTTP.
Le champ WWW-Authenticate prend habituellement comme valeur "nom_utilisateur:mot_de_passe" (sans les guillemets), le tout encodé en base64.

Attention avec la fonction header : cette fonction renseigne les champs qui sont envoyés au client (=navigateur), pas ceux qui sont envoyé au serveur distant. Donc ici tu comets une erreur grave puisque tu offres les identifiants au visiteur sur un plateau d'argent.
Modifié par QuentinC (07 Oct 2007 - 00:05)
oui tout a l'heure en lisant bien la doc sur les header, j'ai compris que ça n'envoyait seulement les informations au client. Donc tu as raison je lui offre mon mot de passe Smiley confused

je m'y était pris comme ceci :
$data = base64_encode("user:pass");
header("Authorization: Basic ".$data);


pour la récupération du fichier j'utilise copy() et fgetcsv().

Sinon j'ai trouvé un lien, mais je n'ai pas encore eu le temps de lire vraiment ce qu'il raconte, je verrai ça demain.
http://www.phpclasses.org/browse/package/576.html
Modifié par Rasta31 (07 Oct 2007 - 02:19)
Necromantik a écrit :
Bonjour,

Si allow_url_fopen est autorisé (dans php.ini) tu peux parfaitement utiliser la syntax dédiée qui se présente ainsi:
http://user:mot_de_passe@www.domaine.tld/fichier.xyz

par exemple:
$fileData = file_get_contents('http://toto:hello@www.domaine.tld/le_fichier_a_toto.txt');
echo $fileData;

Smiley eek je vais tester, si ça fonctionne ça me sauve !

Merci beaucoup Smiley smile

edit: ça marche ! Ca m'enlève une belle épine du pied, et ça reste très simple comme code, encore merci Smiley smile
Modifié par Rasta31 (07 Oct 2007 - 19:10)