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 :

HTTP POST


Sujet :

Web & réseau Delphi

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut HTTP POST
    Petit probleme je veux recuperer une fiche a partir d'un site j'ai trouvé sa sur le site mais je ne comprend pas si quelqu'un pe m'expliquer j'ai essayer avec idhttp.post mais je ne dois pas bien le faire

    http://www.moviecovers.com/getfilm.html est un script qui renvoit la fiche d'un film au format .FILM. Il accepte les requêtes de type HTTP POST uniquement, et attend l'IDMC du film demandé dans le champ "idmc".
    MERCI

  2. #2
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    PS IDMC c'est le titre du film !!
    par exemple MATRIX

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je peux te proposer ceci pour récupérer le contenu d'une page web :
    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
    Uses Wininet;
     
     
    {----------------------------------------------------------------}
    Function GetHTML(AUrl: String): String;
    Var
      databuffer: Array[0..4095] Of Char;
      hSession, hfile: hInternet;
      dwindex, dwcodelen, dwread, dwNumber: Cardinal;
      dwcode: Array[1..20] Of Char;
      res: PChar;
    Begin
      Result := '';
      hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, Nil, Nil, 0);
      If (Assigned(hsession)) Then Begin
        hfile := InternetOpenUrl(hsession, PChar(AUrl), Nil, 0, INTERNET_FLAG_RELOAD, 0);
        dwIndex := 0;
        dwCodeLen := 10;
        HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex);
        res := pchar(@dwcode);
        dwNumber := SizeOf(databuffer) - 1;
        If ((res = '200') Or (res = '302')) Then Begin
          While (InternetReadfile(hfile, @databuffer, dwNumber, DwRead)) Do Begin
            If (dwRead = 0) Then Break;
            databuffer[dwread] := #0;
            Result := Result + PChar(@databuffer);
          End;
        End Else Result := 'Status:' + res;
        If (Assigned(hfile)) Then InternetCloseHandle(hfile);
      End;
      InternetCloseHandle(hsession);
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      Memo1.Text := GetHTML('http://monsite.com/mapage.htm');
    End;
    J'espère que ça te conviendra, à+


    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

  4. #4
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    en fait j'ai compris pourquoi le fichier zip que je voulais telecharger ne marchait pas (j'ai fait un post pour rien) le probleme est que le zip n'etait pas stocker mais creer a chaque fois donc avant d'executer idhttp.get je devait lancer un requete pour la création avec le fameux script
    http://www.moviecovers.com/getfilm.html
    j'ai reussi en utilisant WinExec('http://www.moviecovers.com/getfilm.html/xxx.zip',SW_SHOWNORMAL);
    avant le idhttp.get sa ma prit 3 jours de reflection ce bordel c'est pour sa que ma fonction ne marchait pas et que j'ai viré le post sur idhttp erreur ce matin
    MERCI sub0 tu es un precieux allié comme toujours !!

  5. #5
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    En fait sa ne marche pas bien avec WinExec voila la reponse du developeur du site
    Effectivement, les archives ZIP sont générées à la demande.

    Il faut impérativement appeler getzip.html, et suivre la redirection
    retournée (comme le font les navigateurs web)...
    et j'a itrouvé sa comme explication sur developpez.net :
    http://www.developpez.net/forums/vie...hlight=tidhttp
    mais c'est du C++ donc si quelqu'un pe m'aider !
    MERCI

  6. #6
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Y a t'il un moyen d'effectuer un get http sans idhttp car d'apres la source builder il utilisait MNHTTP car indy renvoit une erreur

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    En fait, c'est comme si tu avais une page html avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html> 
    <body>
    <form action="http://www.moviecovers.com/getfilm.html" method="post">
    <input type="text" name="idmc">
    <input type="submit">
    </form>
    </body>
    </html>
    Tu vois qu'il s'agit d'un formulaire à poster. On poste le nom du film dans le champs de saisie nomé "idmc". Si tu éxécutes cette page html, tu verras qu'il te retourne les infos du film que tu recherches. Autrement dit, il suffit d'utiliser la méthode POST du composant de ton choix et non GET... Perso, j'utilise HttpCli d'ICS. Je ne sais pas si cela te conviendra, en tous les cas, je peux te filer un code qui marche et pas besoin d'installer de compo en prime puisque je le crée dynamiquement :

    http://sub0.developpez.com/delphi/http_post.zip

    à+


    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

  8. #8
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Salut Sub t'as source est nikel sauf que ...
    on ne peut la lancer qu'une fois la seconde fois que la boucle est utilisé on obtient
    Violation d'acces a l'adresse 00403EC0 dans le module 'Projet1.exe'.
    Ecriture de l'adresse 00000060
    je pense qu'il y a un probleme avec la liberation de la memoire MERCI de me repondre

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bizarre, ça fonctionne bien sur mon pc.
    Citation Envoyé par jmjmjm
    la seconde fois que la boucle est utilisé on obtient...
    De quelle "boucle" parles-tu ? Ya pas de boucle dans mon code !
    Si tu l'as modifié, montre moi comment tu as fait.

    Essaye toujours en libérant les objets alloués avant de réallouer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      If (HttpCli1.SendStream <> Nil) Then FreeAndNil(HttpCli1.SendStream);
      If (HttpCli1.RcvdStream <> Nil) Then FreeAndNil(HttpCli1.RcvdStream);
      If (HttpCli1 <> Nil) Then FreeAndNil(HttpCli1);
    De retour parmis vous après 10 ans!!

  10. #10
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Erreur de compilation avec tes dernier parametre :
    If (HttpCli1.SendStream <> Nil) Then FreeAndNil(HttpCli1.SendStream);
    If (HttpCli1.RcvdStream <> Nil) Then FreeAndNil(HttpCli1.RcvdStream);

    ERREUR /

    [Erreur] Unit1.pas(56): Un objet constante ne peut être passé comme paramètre Var

  11. #11
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    J'ai peut etre mal fait j'ai fait ca :


    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
     
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      HttpCli1 := THttpCli.Create(self);
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      HttpCli1.SendStream := TMemoryStream.Create;
      HttpCli1.RcvdStream := TMemoryStream.Create;
      HttpCli1.ProxyPort := '80';
      HttpCli1.URL := 'http://www.moviecovers.com/getfilm.html';
      HttpCli1.SendStream.Write('idmc=matrix', 256);
      HttpCli1.SendStream.Position := 0;
      Try
        Try HttpCli1.Post;Except End;
      Finally
        HttpCli1.RcvdStream.Position := 0;
        Memo1.Lines.LoadFromStream(HttpCli1.RcvdStream);
      End;
     If (HttpCli1 <> Nil) Then FreeAndNil(HttpCli1);
     end;

  12. #12
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Non, simplement tu as ajouté mon code sans tenir compte du reste, en particulier, les directives de compilation...
    Dans la démo que je t'ai donné, il ya ceci dans project1.dpr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$V+,B+,X+,T+,P+,H+,J+}
    La directive qui concerne ce message est $J+ :
    Citation Envoyé par [img
    http://sub0.developpez.com/tf1.png[/img]]Constantes typées affectables
    Activez cette option pour obtenir une compatibilité avec Delphi 1.0. Si cette option est activée, le compilateur autorise les affectations à des constantes typées. Correspond à {$J}.
    De retour parmis vous après 10 ans!!

  13. #13
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Oui bas justement puisque ca yé dans projet1.dpr sa devrait marcher

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par jmjmjm
    J'ai peut etre mal fait j'ai fait ca :


    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
     
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      HttpCli1 := THttpCli.Create(self);
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      HttpCli1.SendStream := TMemoryStream.Create;
      HttpCli1.RcvdStream := TMemoryStream.Create;
      HttpCli1.ProxyPort := '80';
      HttpCli1.URL := 'http://www.moviecovers.com/getfilm.html';
      HttpCli1.SendStream.Write('idmc=matrix', 256);
      HttpCli1.SendStream.Position := 0;
      Try
        Try HttpCli1.Post;Except End;
      Finally
        HttpCli1.RcvdStream.Position := 0;
        Memo1.Lines.LoadFromStream(HttpCli1.RcvdStream);
      End;
     If (HttpCli1 <> Nil) Then FreeAndNil(HttpCli1);
     end;
    non, ce code n'est pas bon, puisqu'à chaque fois que tu cliques sur le bouton, l'objet est libéré ! (regarde donc la dernière ligne).
    Donc tu le crées au début dans formcreate et tu le supprimes après en cliquant sur le bouton.
    Aurais-tu besoin d'un cours sur les objets ?
    De retour parmis vous après 10 ans!!

  15. #15
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    C'est comme ça qu'il faut faire :
    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
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      HttpCli1 := THttpCli.Create(self);
      HttpCli1.SendStream := TMemoryStream.Create;
      HttpCli1.RcvdStream := TMemoryStream.Create;
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      HttpCli1.ProxyPort := '80';
      HttpCli1.URL := 'http://www.moviecovers.com/getfilm.html';
      HttpCli1.SendStream.Write('idmc=matrix', 256);
      HttpCli1.SendStream.Position := 0;
      Try
        Try HttpCli1.Post;Except End;
      Finally
        HttpCli1.RcvdStream.Position := 0;
        Memo1.Lines.LoadFromStream(HttpCli1.RcvdStream);
      End;
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      If (HttpCli1.SendStream <> Nil) Then HttpCli1.SendStream.Free;
      If (HttpCli1.RcvdStream <> Nil) Then HttpCli1.RcvdStream.Free;
      If (HttpCli1 <> Nil) Then FreeAndNil(HttpCli1);
    End;
    De retour parmis vous après 10 ans!!

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut

    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

  17. #17
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci Sub pour le cours sur les objets je vais peut etre y songer en effet désolé mais sa doit pas faire plus d'un an que j'ai commancé Delphi (tres interessant entre parenthèse) je faisais un peux de C avant et de l'openGL

  18. #18
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    oui, possible qu'il te manque quelques bases... Mais bon, tu verras, ce n'est pas très compliqué finalement.
    Bon courage, à+
    De retour parmis vous après 10 ans!!

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

Discussions similaires

  1. [HTTP] Envoi de fichiers par http post
    Par java_girl dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 28/08/2006, 16h44
  2. [j2ee 1.3]sendRedirect et HTTP POST
    Par Glob dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/05/2006, 10h33
  3. HTTPS - POST côté client
    Par Julaie95 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 29/03/2006, 15h37
  4. Requette HTTP POST
    Par CrazySeb dans le forum C++
    Réponses: 7
    Dernier message: 25/02/2006, 15h17
  5. [HTTP][POST] passassion de variable
    Par Yodalf dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 04/09/2004, 21h09

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