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

Web & réseau Delphi Discussion :

tNetHTTPRequest tNetHTTPClient comportement etrange sous linux


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 173
    Par défaut tNetHTTPRequest tNetHTTPClient comportement etrange sous linux
    Bonjour

    je suis en train de d’écrire une unité pour générer des downtime ou plage de maintenance sur nos serveurs de supervisions (Zabbix, Nagios)
    j'utilise Delphi 13 avec les deux patch
    et environnement Windows et Linux
    pour la partie Zabbix ras a premiere vue
    mais Nagios il y a un petit soucis sous linux
    pour générer un downtime il faut passer par un post sur une url du style
    %APIBASE%/nrdp/?cmd=submitcmd&token=%TOKEN%&command=SCHEDULE_HOST_DOWNTIME;%HOST%;%DATEDEB%;%DATEFIN%;1%;0;0;%USER%;%COMMENTAIRE%
    ce qui donne apres remplacement des varriables
    ht..s://supervision/NAEMON/api/nrdp/?cmd=submitcmd&token=montoken&command=SCHEDULE_HOST_DOWNTIME%3BSERVEUR001%3B1763624844%3B1763626044%3B1%3B0%3B0%3BFBASS%3BTest+V3.0+pour+vôir+éèç
    qui dans un curl, page web, .. fonctionne nickel

    la partie du code d’envoi rien de particulier ici j'ai commenter l'utilisation du tNetHTTPRequest mais çà change rien au souci

    // res := fNetHTTPRequest.get ( strCmdTmp );
    res := fNetHTTPClient.get ( strCmdTmp );
    la déclaration du fNetHTTPClient est :
    fNetHTTPClient := TNetHTTPClient.Create( nil );
    fNetHTTPClient.Asynchronous := False;
    fNetHTTPClient.ConnectionTimeout := 1000;
    fNetHTTPClient.ResponseTimeout := 1000;
    fNetHTTPClient.HandleRedirects := True;
    fNetHTTPClient.AllowCookies := True;
    fNetHTTPClient.UserAgent := 'Embarcadero URI Client/1.0';
    fNetHTTPClient.OnValidateServerCertificate := onValidateCerttificat;
    fNetHTTPClient.UseDefaultCredentials := false;
    pour l'utilisation du request j'avais mis un datamodule et placé les deux composant Client et request dessus

    le soucis que j'ai sous linux c'est que nrpd reçois en double les requêtes et donc me génère deux downtime
    [1763626112] SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour vôir éèç
    [1763626112] SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour vôir éèç
    il semble que fNetHTTPClient envoie deux fois la requête sous linux
    malgré que le onreceivedata ne soit appelé qu'une fois

    j'ai testé
    - avec
    fNetHTTPClient.HandleRedirects := false;
    - sans les accents dans le commentaire

    suis je devant un bug tNetHTTPClient vs linux ou j'ai zappé quelque chose ?

    ps le retour est le suivant
    HTTP/1.1 200 OK
    "<?xml version="1.0" encoding="utf-8"?> <result> <status>0</status> <message>OK</message> </result>

  2. #2
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 634
    Billets dans le blog
    1
    Par défaut
    Hello,

    Utiliser Post() : NRDP attend un POST. Avec Get() sous Linux, la libcurl peut envoyer deux requêtes (HEAD + GET), ce qui provoque le doublon.
    Paramètres : on envoie cmd, token et command dans le corps de la requête.
    Redirects désactivés : évite que la requête soit rejouée automatiquement.

    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
    uses
      System.SysUtils, System.Classes, System.Net.HttpClient, System.Net.URLClient;
     
    procedure SendDowntime;
    var
      HttpClient: TNetHTTPClient;
      Response: IHTTPResponse;
      Params: TStringList;
      URL: string;
    begin
      HttpClient := TNetHTTPClient.Create(nil);
      try
        HttpClient.Asynchronous := False;
        HttpClient.ConnectionTimeout := 5000;
        HttpClient.ResponseTimeout := 5000;
        HttpClient.HandleRedirects := False;
        HttpClient.UserAgent := 'Delphi NetHTTPClient';
     
        // URL de base NRDP
        URL := 'https://supervision/NAEMON/api/nrdp/';
     
        // Paramètres POST
        Params := TStringList.Create;
        try
          Params.Add('cmd=submitcmd');
          Params.Add('token=montoken');
          Params.Add('command=SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour voir eec');
     
          Response := HttpClient.Post(URL, TStringStream.Create(Params.DelimitedText, TEncoding.UTF8));
     
          Writeln('Status: ' + Response.StatusCode.ToString);
          Writeln('Body: ' + Response.ContentAsString);
        finally
          Params.Free;
        end;
      finally
        HttpClient.Free;
      end;
    end;
    Tu devrais obtenir un seul downtime créé, aussi bien sous Windows que sous Linux.
    Il s’agit peut-être d’un bug ou limitation de TNetHTTPClient sous Linux.

    Sous Windows, TNetHTTPClient.Get() fonctionne comme attendu, mais sous Linux il peut envoyer deux requêtes (HEAD + GET ou double GET).
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 173
    Par défaut
    Merci XeGregory

    en effet post et pas get c'est a force des tester dans tous les sens mais le résultat était le même
    en passant les paramètres dans un tstringlist en effet plus de double appel
    par contre le fait de transformer en TStringStream ne passe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      lParamList := TStringList.Create;
      lParamList.Add('cmd=submitcmd');
      lParamList.Add('token='+ fStrToken);
      lParamList.Add( 'command=SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour voir eec');
      res := fNetHTTPClient.post (strUrl, lParamList, nil, nil);

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

Discussions similaires

  1. Comportement étrange sous IE - Je sèche !
    Par philreunion dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 17/04/2013, 21h52
  2. [Yahoo UI] Datatable comportement étrange sous IE
    Par darthmower dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 07/05/2010, 12h23
  3. Comportement étrange sous IE6
    Par Heretic dans le forum IGN API Géoportail
    Réponses: 30
    Dernier message: 26/08/2009, 13h20
  4. [AJAX] [Intéressant à savoir!] Comportement étrange sous IE
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 19h07
  5. Comportement étrange ksh sur linux
    Par hugo123 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 09/08/2006, 11h55

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