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 :

Packet HTTP découpage inattendu !


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Par défaut Packet HTTP découpage inattendu !
    Je développe un client pour utiliser des Services Web.
    Pour cela j'utilise l'importeur WSDL de delphi7 qui génère mon code pour accéder aux différentes fonctions du(des) service(s) web.

    J'ai déjà eu des problèmes avec l'authentification, le code de base généré par delphi balancait la trame suivante (j'ai volontairement masqué les noms des services) :

    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
     
    POST /sigems/services/XXXYYY HTTP/1.1
    SOAPAction: ""
    Content-Type: text/xml
    User-Agent: Borland SOAP 1.2
    Host: 212.234.37.97:1234
    Content-Length: 481
    Connection: Keep-Alive
    Cache-Control: no-cache
     
    <?xml version="1.0"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
      <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <NS1:XXXZZZ xmlns:NS1="http://212.234.37.97:1234/sigems/services/XXXYYY"/>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    alors que le service avait besoin d'une authentification de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Authorization: Basic qmYhe67rvvt89i0mkky==
    Après avoir galéré pendant pas mal de temps j'ai finalement réussi à ajouter l'authentification en passant directement par l'API HttpAddRequestHeaders(...) bref j'ai fais le bourrin mais j'ai rien trouver de mieux D'ailleurs si quelqu'un veut la méthode, je peux donner le code, en cherchant sur google j'ai vu pas mal de gens qui avait le même problème, sans réponses :-/

    Ainsi j'ai pu enfin accéder aux services Web :Applo:

    Mais voilà, en voulant utiliser une autre "fonction" du service je découvre un nouveau problème !
    Je me retape cette erreur d'authentification, et en regardant les trames envoyées, j'ai compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    POST /sigems/services/XXYYZZZ HTTP/1.1
    SOAPAction: ""
    Content-Type: text/xml
    Authorization: Basic qmYhe67rvvt89i0mkky==
    User-Agent: Borland SOAP 1.2
    Host: 212.234.37.97:1234
    Content-Length: 775
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: JSESSIONID=56F7DD14FCA80A0D50D06A89AA27A083
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
      <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <NS1:XXXZZZYY xmlns:NS1="http://212.234.37.97:1234/sigems/services/XXYYZZZ">
          <param1 xsi:type="xsd:string">value1</param1>
          <param2 xsi:type="xsd:string">value2</param2>
          <param3 xsi:type="xsd:string">value3</param3>
        </NS1:XXXZZZYY>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    En fait l'authentification est bien là, mais le problème vient du fait que c'est non plus envoyé en un packet, mais en 2 !
    Déjà je comprend pas déjà pourquoi le packet est découpé mais surtout qu'est-ce que ça change ? J'ai remarqué que le serveur se génait pas pour découper ses réponses en plusieurs paquets...
    Se peut-il qu'il a y une erreur sur le calcul de la taille de mon paquet et que ce découpage est innatendu par le serveur (en tout cas, pas de cette manière) ? car c'est vrai que j'ai ajouté l'authentification à la brute quand même...

    Ces services web me font péter un plomb
    Si quelqu'un a une idée ! je lui serais très reconnaissant

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Non, c'est normal, le protocole HTTP découle du TCP/IP. Et les informations sont envoyées de serveur à client (ou vice-versa), par paquets.

    Dans le premier paquet, il doit y avoir une indication sur la taille totale de ce qui est envoyé. Donc à la réception, il faut recoller les morceaux, les uns à la suite des autres jusqu'à ce que la taille des deux paquets reçu corresponde à ce qui était attendu.

    En plus, si tu envoies deux authentifications à la suite l'une de l'autre et trop vite par exemple, il se peut que tes deux infos arrivent en trois paquets, avec le deuxième paquet contenant la fin du premier envoi et le début du deuxième envoi !

    Pour corser l'affaire, il me semble que par HTTP, les paquets s'ils sont envoyés par le serveur dans le bon ordre, ils ne sont pas forcément reçus dans le bon ordre par le client !

    Bon courage !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Par défaut
    Citation Envoyé par waskol
    Non, c'est normal, le protocole HTTP découle du TCP/IP. Et les informations sont envoyées de serveur à client (ou vice-versa), par paquets.

    Dans le premier paquet, il doit y avoir une indication sur la taille totale de ce qui est envoyé. Donc à la réception, il faut recoller les morceaux, les uns à la suite des autres jusqu'à ce que la taille des deux paquets reçu corresponde à ce qui était attendu.
    A mon sens, le problème doit provenir du fait que la taille de découpage doit être mal indiquée dans mes paquets, peut-être justement parce-que j'ajoute l'authentification un peu comme une brute.

    En plus, si tu envoies deux authentifications à la suite l'une de l'autre et trop vite par exemple, il se peut que tes deux infos arrivent en trois paquets, avec le deuxième paquet contenant la fin du premier envoi et le début du deuxième envoi !
    Heureusement j'ai pas eu ce genre de problème ^^
    C'est juste mon 2ème envoie qui se découpe en 2 paquets et à priori le serveur ne comprend pas très bien.

    Pour corser l'affaire, il me semble que par HTTP, les paquets s'ils sont envoyés par le serveur dans le bon ordre, ils ne sont pas forcément reçus dans le bon ordre par le client !
    Il me semblait que ct justement ici la différence entre UDP et TCP/IP... TCP/IP s'y retrouvait quand bien même les paquets ne sont pas reçus dans l'ordre... enfin là encore, si jamais mes entêtes de paquet contiennent des infos foireuses, forcément ça peut pas aller.

    Bon courage !
    Merci (pour ta réponse aussi) ^^
    Je vais essayer de bidouiller un peu mon code et essayer de comprendre pourquoi mon paquet est découpé...

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/11/2011, 17h12
  2. [HTTP] Wget-like
    Par tmonjalo dans le forum Développement
    Réponses: 2
    Dernier message: 28/07/2003, 13h39
  3. [HTTP] Syntaxe méthode POST
    Par Gruik dans le forum Développement
    Réponses: 3
    Dernier message: 26/07/2003, 17h12
  4. Packet forwarder
    Par Gabuzomeu dans le forum Développement
    Réponses: 3
    Dernier message: 03/06/2003, 17h44
  5. [web] rapatrier un document via HTTP
    Par ddhia dans le forum Web
    Réponses: 2
    Dernier message: 08/04/2003, 11h01

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