IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Requete HTTP avec identification


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut Requete HTTP avec identification
    Bonjour,

    J'essai de me connecter un un Haut parleur qui fonctionne en réseau: https://www.toa.fr/produits/ip-a1sc15/

    Depuis un navigateur, il ouvre une fenêtre avec demande d'identification Nom : identification.jpg
Affichages : 396
Taille : 23,0 Ko

    Par contre , je n'arrive pas depuis Delphi à faire une identification automatique .

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function TForm1.GetURLAsString(const aURL: string): string;
    var
      HTTP: TIdHTTP;
    begin
      memo1.clear ;
      HTTP := TIdHTTP.Create(nil);
      try
     
      HTTP.ConnectTimeout := 10000 ;
      HTTP.Request.Clear;
     
      HTTP.Request.Host := '192.168.118.201' ;
      HTTP.Request.BasicAuthentication := True ;
      HTTP.Request.Username := 'admin' ;
      HTTP.Request.Password := 'guest' ;
     
      Result := HTTP.Get(aURL);
      memo1.Lines.Text := Result ;
     
      finally
        HTTP.Free;
      end;
     
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      GetURLAsString('http://192.168.118.201/api/v2/pattern/play?pattern_number=1') ;
     
    end;

    J'ai toujours en réponse :
    {
    "response": {
    "code": 3,
    "message": "Unauthorized"
    },
    "result": false
    }

    Réponse identique si j'appuie sur annuler dans la fenêtre d'identification du navigateur.

    DELPHI XE5 - WIN32

    Merci d'avance pour vos idées et bon week-end.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Cela renvoie un JSON, le Haut-parleur gère-t-il un Service REST ou seulement un Server Web conçu pour retourner du HTML
    Le problème dans la question c'est qu'elle est très spécifique à votre matériel, sans lire toutes les documentations ou l'infime chance que quelqu'un connaisse, vous n'aurez pas beaucoup de réponse, le fabricant n'a pas un support ?

    Si vous regardez le code source dans le formulaire dans le navigateur, êtes vous sur de voir une authentification basique ?
    Comment allez vous gérer les cookies si l'enceinte les utilise pour conserver les informations de connexion ?

    N'existe pas une API plus bas niveau, en TCP par exemple, avec des commandes avec la couche SIP


    Avant de passer à Delphi, peut-être vous devriez tester avec cURL par exemple

    Code cmd : Sélectionner tout - Visualiser dans une fenêtre à part
    curl --max-time 1 --noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 243
    Par défaut
    Le message retourné avec l'erreur 3 est un message propriétaire de l'appareil qui correspond à l'erreur standardisée HTTP403.

    L'appareil a donc reçu votre requête mais ne vous donne pas l'autorisation de dialoguer avec lui.

    Première question à se poser, quel type de connexion: Connexion en clair ou chiffré

    https est une liaison sécurisé et chiffrée via SSL, http est une liaison en claire non chiffrée!!!

    4. Votre code ne gère pas l'aspect SSL (gestion de certificat)


    Première question à vous poser: Votre appareil accepte quel type de connexion?

    Pour cela, faites déjà le test dans un navigateur en tapant L'URL qui fonctionne avec la mention http puis avec https

    Si vous faites du http alors que du https est requis, il est normal que vous receviez en retour un "Non autorisé". Dans ce cas, le login et password même corrects ne vont pas suffire...

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Bonjour Anselme45,
    Connection en Http non chiffré dans le navigateur. Bien sur, j'ai fait le test sur un navigateur http://192.168.118.201/api/v2/patter...ttern_number=1
    Cela pilote bien le HP ( Après avoir rentré utilisateur et mot de passe dans la fenêtre d'identification une 1ere fois ).
    Le navigateur, après envoie de la requête m'affiche bien site non sécurisé et je n'ai pas de cadenas.
    Je pense donc être sans chiffrage.
    Merci pour ton aide


    Citation Envoyé par Anselme45 Voir le message
    Le message retourné avec l'erreur 3 est un message propriétaire de l'appareil qui correspond à l'erreur standardisée HTTP403.

    L'appareil a donc reçu votre requête mais ne vous donne pas l'autorisation de dialoguer avec lui.

    Première question à se poser, quel type de connexion: Connexion en clair ou chiffré

    https est une liaison sécurisé et chiffrée via SSL, http est une liaison en claire non chiffrée!!!

    4. Votre code ne gère pas l'aspect SSL (gestion de certificat)


    Première question à vous poser: Votre appareil accepte quel type de connexion?

    Pour cela, faites déjà le test dans un navigateur en tapant L'URL qui fonctionne avec la mention http puis avec https

    Si vous faites du http alors que du https est requis, il est normal que vous receviez en retour un "Non autorisé". Dans ce cas, le login et password même corrects ne vont pas suffire...

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    j'écrirais plutôt lpFile et lpParameters séparément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button4Click(Sender: TObject);
    begin
       ShellExecute(Handle, 'open', 'C:\Windows\System32\curl.exe', '--noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"', nil, SW_SHOW);
    end;
    Si cela retourne quelque chose dans l'invite de commande, cela doit fonctionner avec le ShellExecute mais le problème c'est que vous n'allez pas avoir le résultat du Pipe, faudrait utiliser CreateProcess : Redirection des entrées/sorties du process via TSLTShellExecuteWrapper.CallCmd


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button4Click(Sender: TObject);
    var
      ExitCode: Int64;
      ResultText, ErrorText: string;
    begin
      TSLTShellExecuteWrapper.CallCmd('', 'C:\Windows\System32\curl.exe', '--noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"', ExitCode, ResultText, ErrorText);
      Memo1.Lines.Text := ResultText;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Bonjour,
    Super, cela fonctionne

    Pour info, sous Delphi XE5 ligne 438 dans l'unité STL.Commin.WinApi.ShellApi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       TULargeInteger(ExitCode).HighPart := 0;
                if not GetExitCodeProcess(ProcessInfo.hProcess, TULargeInteger(ExitCode).LowPart) then
                  ExitCode := -1;
    Delphi connais bien HighPart et LowPart
    Dans winapi.Windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     ULARGE_INTEGER = record
        case Integer of
        0: (
          LowPart: DWORD;
          HighPart: DWORD);
        1: (
          QuadPart: ULONGLONG);
      end;
    Par contre dans delphi 11.2, j'ai une erreur a la compilation, il ne connais pas HighPart et LowPart
    Le winApi.Windows de Delphi 11.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    _ULARGE_INTEGER = record
        case Integer of
        0: (
          LowPart: DWORD;
          HighPart: DWORD);
        1: (
          QuadPart: ULONGLONG);
      end;
      {$EXTERNALSYM _ULARGE_INTEGER}
      {$NODEFINE TULargeInteger}
      TULargeInteger = UInt64;
      ULARGE_INTEGER = _ULARGE_INTEGER;
      {$EXTERNALSYM ULARGE_INTEGER}
    Je marque en résolu et te remercie pour ton aide.



    Citation Envoyé par ShaiLeTroll Voir le message
    j'écrirais plutôt lpFile et lpParameters séparément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button4Click(Sender: TObject);
    begin
       ShellExecute(Handle, 'open', 'C:\Windows\System32\curl.exe', '--noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"', nil, SW_SHOW);
    end;
    Si cela retourne quelque chose dans l'invite de commande, cela doit fonctionner avec le ShellExecute mais le problème c'est que vous n'allez pas avoir le résultat du Pipe, faudrait utiliser CreateProcess : Redirection des entrées/sorties du process via TSLTShellExecuteWrapper.CallCmd


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button4Click(Sender: TObject);
    var
      ExitCode: Int64;
      ResultText, ErrorText: string;
    begin
      TSLTShellExecuteWrapper.CallCmd('', 'C:\Windows\System32\curl.exe', '--noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"', ExitCode, ResultText, ErrorText);
      Memo1.Lines.Text := ResultText;
    end;

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Bonjour ShaiLeTroll
    Apparemment, Le HP gère le SIP, mais je ne connais pas .

    Pour le cURL, j'ai essayer depuis une invite de commande, cela fonctionne, par contre depuis delphi, impossible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button4Click(Sender: TObject);
    begin
       ShellExecute(Handle,nil,'C:\Windows\System32\curl.exe --noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"',nil,nil,SW_SHOW);
     
    end;
    Rien ne se passe.
    Pour le code source du formulaire, je ne sais pas comment le regarder.

    Merci pour ton aide.


    Citation Envoyé par ShaiLeTroll Voir le message
    Cela renvoie un JSON, le Haut-parleur gère-t-il un Service REST ou seulement un Server Web conçu pour retourner du HTML
    Le problème dans la question c'est qu'elle est très spécifique à votre matériel, sans lire toutes les documentations ou l'infime chance que quelqu'un connaisse, vous n'aurez pas beaucoup de réponse, le fabricant n'a pas un support ?

    Si vous regardez le code source dans le formulaire dans le navigateur, êtes vous sur de voir une authentification basique ?
    Comment allez vous gérer les cookies si l'enceinte les utilise pour conserver les informations de connexion ?

    N'existe pas une API plus bas niveau, en TCP par exemple, avec des commandes avec la couche SIP


    Avant de passer à Delphi, peut-être vous devriez tester avec cURL par exemple

    Code cmd : Sélectionner tout - Visualiser dans une fenêtre à part
    curl --max-time 1 --noproxy "*" --anyauth --user admin:guest "http://192.168.118.201/api/v2/pattern/play?pattern_number=1"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer une requete http avec des sockets
    Par DavidleVrai dans le forum C++
    Réponses: 5
    Dernier message: 20/06/2012, 18h12
  2. Requetes HTTP avec session
    Par Killerguy dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 09/06/2010, 18h17
  3. Réponses: 4
    Dernier message: 01/04/2009, 14h16
  4. Récupérer un fichier par requete http avec parametre GET
    Par ggalou08 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 22/07/2008, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo