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 :

Requête POST avec TIdHTTP découpe ma chaîne


Sujet :

Web & réseau Delphi

  1. #1
    Membre émérite
    Requête POST avec TIdHTTP découpe ma chaîne
    Bonjour à tou(te)s

    J'ai un petit "blème" à l'envoi d'une chaîne de caractères avec le composant Indy TIdHTTP.
    La chaîne est envoyée à un serveur PHP mais elle arrive découpée en blocs de 70 caractères et je ne sais pas pourquoi.
    Chaque bloc est séparé par un signe = suivi d'un retour à la ligne.

    Sachant que ma chaîne de départ fait entre 200 et 250 caractères, sur quelle option je pourrais jouer pour que ma chaîne arrive de la même façon qu'elle est partie ?


    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
     
     
      G := 'fjlkmsjfijsfjkdllflfdmùsldsmdùmsùmdùsmdmsùdmsùdmùsdm';
     
      IdHTTP1.ProtocolVersion := pv1_1;
      IdHTTP1.ProxyParams.ProxyServer := EmptyStr;
      IdHTTP1.ProxyParams.ProxyPort := 0;
     
      MultipartFormDataStream := TIdMultipartFormDataStream.Create;
      MultipartFormDataStream.AddFormField('champ', G);
     
      St := TStringStream.Create;
      IdHTTP1.Post(
        'http://monurl.fr/tests/envoichaine.php',
        MultipartFormDataStream,
        St
      );

  2. #2
    Modérateur

    Bonsoir,

    Pourquoi passer par un TIdMultipartFormDataStream pour envoyer une chaîne ? Surtout si elle est mono part !

    N'y a-t-il pas d'autre possibilité ?
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Expert éminent sénior
    j'utilise un TStringList personnellement qui contient SL.Add('champ=' + G)...mais il ne faut pas que G contienne des #13#10
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre émérite
    cette chaîne n'est qu'une partie de l'ensemble.
    Il y a plusieurs autres éléments et j'ai récemment ajouté une chaîne au format json
    Cette cette chaîne qui pose problème à l'arrivée.
    Des =\n\r sont insérés dans la chaîne à intervalles réguliers

  5. #5
    Rédacteur/Modérateur

    Bonjour,
    Citation Envoyé par Papy214 Voir le message

    Des =\n\r sont insérés dans la chaîne à intervalles réguliers
    Dans ce cas ne faudrait-il pas doubler le \ avant ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Expert éminent sénior
    si ta chaine est au format json compact, elle ne contient pas de #13#10, donc pas de soucis

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      G := 'fjlkmsjfijsfjkdllflfdmùsldsmdùmsùmdùsmdmsùdmsùdmùsdm';
     
      Params := TStringList.create;
      Params.Add('champ=' + G);
     
      St := TStringStream.Create;
      IdHTTP1.Post(
        'http://monurl.fr/tests/envoichaine.php',
        Params,
        St
      );
     
      Params.Free;


    une autre façon de faire plus générique


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      G := 'fjlkmsjfijsfjkdllflfdmùsldsmdùmsùmdùsmdmsùdmsùdmùsdm';
     
      Params := TStringList.create;
      Params.Add('champ=' + TIdEncoderMIME.EncodeString(G));
     
      St := TStringStream.Create;
      IdHTTP1.Post(
        'http://monurl.fr/tests/envoichaine.php',
        Params,
        St
      );
     
      Params.Free;


    et dans ce cas au niveau PHP du dois faire un base64_decode($_POST['champ']) pour retrouver ta chaîne, et comme c'est du Base64 tu peux mettre ce que tu veux dedans ça passera sans problème
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre émérite
    Voilà le code que j'utilise :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
        MultipartFormDataStream := TIdMultipartFormDataStream.Create;
        for Pair in Params do
          // #1000
          MultipartFormDataStream.AddFormField(Pair.Key, Pair.Value);


    En fouillant sur le net, j'ai fini par trouver cette solution qui fonctionne:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
        MultipartFormDataStream := TIdMultipartFormDataStream.Create;
        for Pair in Params do
          // #1000
          MultipartFormDataStream.AddFormField(Pair.Key, Pair.Value, 'utf-8', 'text/plain').ContentTransfer := '8bit';


    A ça je rajoute un fichier avec MultipartFormDataStream.AddFile.

    Quelqu'un avait le même genre de problème mais avec du XML.

    https://forums.embarcadero.com/messa...ssageID=682048


    La solution a fonctionné pour mon cas.
    Mon JSON arrive cette fois-ci sans insertion de =\r\n

    Merci à tous pour vos réponses.