Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion sécurisée via URLConnection

requête POST via un applet java

Sujet résolu
    7 avril 2010 à 14:16:45

    Bonjour bonjour!

    Voila mon problème c'est que je dois lancer des requêtes de commande ptz à une caméra ip via une appli java. Pour me connecter pas de problème, j'arrive d'ailleurs à recevoir un flux vidéo de la cam.
    Mais dès que je souhaite commander un déplacement via la cgi ptz, ca bug. Sur le site web de manipulation, je dois spécifier des id/mdp. Je les ai en ma possession mais je ne vois pas trop comment les associer à URLConnection.
    Si possible j'aimerais éviter de passer par le codage de socket, n'étant pas une bête en réseau, et URLConnection avait l'air de répondre à mes attentes, jusqu'à ce petit problème.

    Quelqu'un s'est-il déjà servi d'une connexion de ce genre? Si oui, un peu d'aide ne serait pas de refus, les sites que j'ai pu parcourir me dise: "j'ai trouvé", mais sans donner d'explication -_-

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      7 avril 2010 à 14:53:44

      Salut, tu peux développer un peu stp, j'comprend pas tout.

      Tu veux appeller un cgi via une URL en gros ? et lui passé des paramètres.
      Hum, j'ai déjà fait cette manip avec InputStreamReader, de mémoire ça donnait un truc du genre :

      try{
          URL url = new URL("http://monsite/moncgi?parametre1=valeur1&parametre2=valeur2");
          InputStreamReader isr = new InputStreamReader(url.openStream()); // envoie des parametres
          BufferedReader br = new BufferedReader(isr);
      
          // tu traite les reponse du br après
      
          // tu close le br quand t'a finit de traiter
          br_l.close();
      }
      


      Dit moi si c'est ce genre de chose que tu cherche à faire ( et qui evite les sockets au passage )
      • Partager sur Facebook
      • Partager sur Twitter
        7 avril 2010 à 15:07:13

        Oui oui c'est bien ce que je cherche à faire. Mon but est d'appeler la cgi ptz.cgi afin de piloter à distance une caméra ip qui peut donc se déplacer horizontalement, verticalement et zoomer.

        Le problème vient du fait que la connexion avec l'ip s'établit, mais pas pour les manipulations.
        Par exemple http://192.168.2.195/axis-cgi/mjpg/video.cgi (l'adresse est fausse ;) ) permet de voir en temps réel le flux vidéo de la caméra.
        En revanche, http://192.168.2.195/axis-cgi/com/ptz.cgi?zoom=3000, qui devrait donc zoomer à l'aide de la cam, ne fonctionne pas car on me demande (sur le site web en tout cas) une identification.

        La question est donc, comment puis-je faire établir une connexion entre mon programme java et cet cgi-ci, connaissant les id/mdp, bien sûr. Je ne vois pas de fonctionnalité de URLConnection qui permettent cette action-ci.
        • Partager sur Facebook
        • Partager sur Twitter
          7 avril 2010 à 15:17:40

          Ok ok, bon je connais pas le protocole de communication de ton cgi, mais t'a essayer de passer en parametre a chaque demande de pilotage a distance l'id et mdp ?

          du genre :

          "http://192.168.2.195/axis-cgi/com/ptz.cgi?zoom=3000&id=valeur&mdp=valeur"
          


          Si tu arrive a récupéré un id, et que tu connais le pass, normalement tu peux crée cette requète ( si le cgi en est capable ).
          Parce que persisté une connexion entre une appli web et un appli desktop unique avec un appel d'url, a part donné les infos à chaque fois, j'vois pas comment ça peut se faire.
          ( Ou alors en utilisant un token peut-être ou un numéro de session, mais ça dépend si c'est pris en charge pas le protocole que le site web utilise )
          • Partager sur Facebook
          • Partager sur Twitter
            7 avril 2010 à 15:39:30

            Merci de ton intérêt pour la chose ^^

            Donc non ta technique ne fonctionne pas. Y compris en entrant en dur la commande dans un navigateur, la page de demande d'authentification revient, et la commande ne s'effectue que si on entre les valeurs dans cette dernière...
            Pour etre précis, ca ne me dérange pas spécialement de devoir fournir à chaque connection le mdp et l'id...Simplement je ne sais pas comment les utiliser avec URL, voir avec les socket (s'il le faut vraiment, je m'y remettrais, mais j'en ai un très mauvais souvenir :-° )
            • Partager sur Facebook
            • Partager sur Twitter
              7 avril 2010 à 15:49:47

              Ok, oui en effet c'est ennuyeux que le cgi ne sache pas faire par defaut, ça t'aurai beaucoup simplifier la vie.

              Hum je suis un peu à court d'idée, il y a bien les classe HttpURLConnection, et HttpsURLConnection aussi, mais pas sur que ça fasse plus ( à toi de voir sait on jamais )

              En tout cas je guetterais si tu trouve une solution au problème. J'suis curieux de savoir comment tu va y arriver !

              Bon courage
              • Partager sur Facebook
              • Partager sur Twitter
                8 avril 2010 à 8:34:58

                ouaip merci pour la tentative d'aide...je vais essayer d'aller voir du côté de httpsURLConnection et je mettrais mes résultats ici...Croisons les doigts><
                • Partager sur Facebook
                • Partager sur Twitter
                  8 avril 2010 à 11:57:18

                  (XD merci)

                  Donc pour tout ceux que ca pourrait intéresser, je donne la solution:
                  Le code de base est bon. Néanmoins, pour permettre une utilisation d'une url utilisant le protocole http (et pas https) et qui nécessite une identification, il est nécessaire d'ajouter une propriété, qui va spécifier que l'authentification est requise et vérifier les id/mdp fourni. On en arrive donc à ajouter la ligne suivante:

                  conn.setRequestProperty ("Authorization", UserNamePasswordBase64(identification,password));

                  Pour les petits malins qui l'auront remarqué, cette propriété ne peut être ajouté qu'en base64! Plusieurs "traducteur" existe néanmoins sur le net. (chercher UserNamePasswordBase64 sur gogole et vous devriez avoir le même que moi). Une fois ceci fait, il est bien entendu recommandé de vérifier la valeur de retour de votre connection. Pour se faire, on liquide l'URLConnection, et on la transforme en HttpURLConnection. Une fonction de cette classe permet alors de récupérer le code de retour de la requête. Si il est différent de "200" (HTTP_AUTHORIZED), on recommence.

                  Attention aussi, si vous lancer un reader derrière votre writter, vous obtiendrez une levée d'exception et un plantage en beauté de votre appli si l'id/mdp fournit ne sont pas les bons.

                  J'espère avoir été clair! En cas de besoin, n'hésitez pas à me contacter, par ce fofo ou via mon adresse mail tsueirel@gmail.com.

                  Have Fun!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 avril 2010 à 12:05:22

                    Hum great !
                    Merci d'avoir poster ta solution, j'vais me noter ça dans un coin ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Connexion sécurisée via URLConnection

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown