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

Langage Delphi Discussion :

Post data avec wininet


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 93
    Par défaut Post data avec wininet
    Bonjour.
    Comment convertir cette commande windows en la même commande avec Wininet sous delphi10 :

    wget --post-data "identity=myusername&password=mY_S3cr3t_pA55w0rd!" --keep-session-cookies --save-cookies=cookies.txt https://site.org/login

    merci pour votre aide
    Gab

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 001
    Par défaut
    Pourquoi passer par des routines aussi bas niveau que wininet ?
    Quitte à utiliser Delphi autant profiter de ce qu'il propose.

    Ecrit vite fait pour montrer le principe :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    uses
      IdHTTP, IdCookieManager, IdSSLOpenSSL, IdURI;
     
    procedure LoginAndSaveCookies;
    var
      HTTP: TIdHTTP;
      CookieManager: TIdCookieManager;
      SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
      PostData: TStringList;
      Response: string;
    begin
      HTTP := TIdHTTP.Create(nil);
      CookieManager := TIdCookieManager.Create(nil);
      SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
      PostData := TStringList.Create;
      try
        // Configuration du gestionnaire SSL pour HTTPS
        HTTP.IOHandler := SSLHandler;
        SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
     
        // Configuration du gestionnaire de cookies
        HTTP.CookieManager := CookieManager;
        HTTP.AllowCookies := True;
        HTTP.HandleRedirects := True;
     
        // Préparation des données POST
        PostData.Add('identity=myusername');
        PostData.Add('password=mY_S3cr3t_pA55w0rd!');
     
        // Envoi de la requête POST
        Response := HTTP.Post('https://site.org/login', PostData);
     
        // Sauvegarde des cookies dans un fichier
        CookieManager.SaveToFile('cookies.txt');
     
        // Affichage de la réponse (optionnel)
        ShowMessage('Réponse reçue : ' + Response);
      finally
        PostData.Free;
        SSLHandler.Free;
        CookieManager.Free;
        HTTP.Free;
      end;
    end;

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    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 096
    Par défaut
    Tu n'es même pas obligé de la traduire en TIdHTTP ou en WinINet, tu peux tricher avec un ShellExecute
    Avec WinINet je n'ai pas utilisé WinHttpConnect mais avec InternetOpen\InternetConnect\HttpOpenRequest\HttpSendRequest, je te laisse regarder le HttpOpenRequest

    C'est une API Windows non spécifique à Delphi et une redirection vers un fichier par exemple wget.response.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    HINSTANCE ShellExecuteA(
      [in, optional] HWND   hwnd,                            // nil
      [in, optional] LPCSTR lpOperation,                     // 'open'
      [in]           LPCSTR lpFile,                          // 'wget --post-data "identity=myusername&password=mY_S3cr3t_pA55w0rd!" --keep-session-cookies --save-cookies=cookies.txt https://site.org/login > wget.response.txt' 
      [in, optional] LPCSTR lpParameters,                    // nil
      [in, optional] LPCSTR lpDirectory,                     // nil
      [in]           INT    nShowCmd                         // SW_HIDE
    );

    Les Cookies, ça risque de poser problème aussi
    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

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2004
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 93
    Par défaut
    Merci pour les réponses. Je vais tester, mais j'ai déjà testé le wget avec powershell directement dans la console de commandes Windows mais la commande est rejetée avec l'erreur "L'esperluette n'est pas autorisée". Un peu bizarre car c'est le & qui relie les différents datas du post !
    Cette commande vient directement de la documentation du site à loguer ! Je me demande si la documentation du site en question est bien à jour.
    Il donne aussi des exemples en C#, en C++, en Java, en Python mais pas en Delphi !

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    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 096
    Par défaut
    Traduire un code C# ou C++ sera plus aisé que la ligne de commande, surtout que cela semble être le Login donc on suppose que les Cookies par la suite seront utile pour conserver la connexion, je n'ai jamais pratiqué la connexion par Cookie en Delphi

    Soit c'était un one shot avec identifiant en basic Auth dans les headers
    Soit c'est du réutilisable avec un jeton (Bearer Auth) avec ou sans autorité (sans c'est login maison, avec c'est via Azure, Google, Meta ...)

    La connexion par cookie, c'est surtout pour le Browser, il n'ont pas une version plus moderne d'API avec un REST qui n'utilise pas les cookies ?
    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 confirmé
    Inscrit en
    Novembre 2004
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 93
    Par défaut
    Oui, le site utilise nécessite une authentification avec cookie utilisé ensuite pour tout téléchargement de fichiers de données du site.
    Le cookie est valable un jour, ensuite re-login.
    Vous pouvez aller sur ce site (www.space-track.org) mais il faut s'inscrire (c'est gratuit) pour ensuite accéder aussi bien aux pages d'aide ou aux fichiers de données (données orbitales de satellites).
    J'ai vu de la documentation avec REST sur le site mais cela ne concernait pas l'authentification, uniquement le téléchargement de fichiers de données.
    Je peux toujours vous mettre le code de login en C# ou C++ mais je ne suis même pas certain que ce code fonctionne.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2014, 09h29
  2. Réponses: 2
    Dernier message: 02/02/2012, 16h19
  3. Réponses: 2
    Dernier message: 04/11/2008, 15h04
  4. Post data avec firefox.
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2007, 20h34
  5. Réponses: 1
    Dernier message: 19/05/2003, 15h47

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