fsockopen, curl ? maintenir l'authentification http basic

Petit nouveau ! | 3 Messages

24 sept. 2008, 11:29

Bonjour,

je vous explique mon problème.
Je travaille sur un site de vidéo surveillance web. Dans ce site, je dois gérer plusieurs caméras ip sur lesquelles je dois m'authentifier avec des login et mots de passe qui peuvent être différent. Le mode d'authentification est http basic.

En utilisant curl ou fsockopen, j'arrive sans problème a télécharger un fichier sur les caméras (avec authentification automatique.

Mon problème est que,, malgrès ma première authentification réussie, je ne peux pas pour autant ensuite lire mon flux vidéo, une authentification http basic m'est redemandée. (si je m'authentifie a la main une fois, ensuite c bon je n'est plus besoin de le refaire).

Le problème est que curl ou fsockopen permettent de télécharger un fichier, mais la c'est un flux vidéo qui est envoyé depuis un fichier .cgi. Donc si j'essaye de télécharger ce fichier, le téléchargement ne se fini jamais.

Donc, est-il possible, de faire une authentification http une fois, et ensuite "maintenir" cette authentification pour que je puisse lire mon flux vidéo sans qu'il me demande quoi que ce soit.

J'ai fait des essais avec les cookies, mais sans succès, mais je m'y suis peut etre mal pris.

Merci de votre aide ...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 sept. 2008, 11:33

Bonjour,

As-tu essayé en utilisant directement une url de la forme:
http://LOGIN:[email protected]/script.cgi

A priori, en utilisant cette url tu devrais même pouvoir t'affranchir de cURL en utilisant file_get_contents
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

24 sept. 2008, 14:44

Cette méthode ne fonctionne que sous Mozilla, car nos amis de chez microsoft on décidé de pas respecter les rfc et d'interdir maintenant ce genre d'authentification par url.

Mon problème ne se produit donc que sous IE en fait, sous mozilla ca marche. Mais malheureusement, il faut que ca marche pour les deux navigateurs ;(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 sept. 2008, 15:06

:shock: gné?!

Cela n'a absolument rien à voir avec la navigateur car si tu utilises file_get_contents(), curl ou filesockopen() c'est le serveur qui fait l'appel à la page et en aucun cas le navigateur du visiteur.
Par conséquent il ne devrait pas y avoir de problème.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

24 sept. 2008, 16:18

alors en fait avec curl, fsockopen et même file_get_content (que je viens de tester) j'arrive bien a downloader un fichier sur le serveur distant (en passant en paramètre mon login et mon mot de passe).

Mais le truc qui rend tout ca compliqué, c'est que le fichier sur lequel je veux me connecter, est un fichier .cgi qui renvoi un flux vidéo. Et comme curl, fsockopen ou get_file_contents ne me permettent 'que' de télécharger un fichier, je ne peut pas maintenir ma connexion.

Je sais pas si je suis clair en fait, voila mon code source :

Code : Tout sélectionner

$url = "http://" .$v_ip_address .":" .$v_tcp_port; $auth = base64_encode($v_login .":" .$v_password); $header = array("Authorization: Basic $auth"); $opts = array( 'http' => array ('method'=>'GET','header'=>$header)); $ctx = stream_context_create($opts); file_get_contents($url,false,$ctx); ?> <SCRIPT LANGUAGE="JavaScript"> var BaseURL = "http://<?php echo $v_ip_address;?>:<?php echo $v_tcp_port?>/"; var DisplayWidth = "<?php echo $v_resolution_width;?>"; var DisplayHeight = "<?php echo $v_resolution_height;?>"; var File = "axis-cgi/mjpg/video.cgi?resolution=<?php echo $v_resolution_width;?>x<?php echo $v_resolution_height;?>"; var output = ""; var AppletDir = BaseURL + "java/ama"; var VideoPath = "axis-cgi/mjpg/video.cgi?resolution="; var restOfPath = ""; var VideoURL = BaseURL + VideoPath; output = '<applet archive="ama.jar" codeBase="'; output += AppletDir + '"'; output += ' code="ama.MediaApplet" height='; output += DisplayHeight; output += ' width='; output += DisplayWidth; output += '>'; output += '<param name="code" VALUE="ama.MediaApplet">'; output += '<param name="archive" VALUE="ama.jar">'; output += '<param name="codebase" VALUE="'; output += AppletDir + '">'; output += '<param name="ama_cgi-path" VALUE="axis-cgi">'; output += '<param name="cache_archive" VALUE="ama.jar">'; output += '<param name="cache_version" VALUE="1.0.0.0">'; output += '<param name="ama_plugins" VALUE="">'; output += '<param name="type" VALUE="application/x-java-applet;version=1.4">'; output += '<param name="ama_url" VALUE="'; output += VideoURL; output += DisplayWidth + 'x' + DisplayHeight; output += restOfPath +'">'; output += '</applet>' document.write(output); </SCRIPT>
En fait je voudrai faire une connexion qui m'authentifié, et ensuite conserver cette authentification pour ensuite appeler mon applet java qui elle va lire ma vidéo tranquillement ...

(Merci en tout cas pour tes réponses)[/code]