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 Perl Discussion :

[web] [debutant] utiliser URI.


Sujet :

Web Perl

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 196
    Par défaut [web] [debutant] utiliser URI.
    Bonjour à tous,

    je dois créer un script de connection sur une application intranet.
    j'ai donc utilisé ethereal pour récupérer les requêtes utilisé pour la connection.
    mon problème est que la troisiéme requête utilise URI ?!

    j'ai regardé un peut sur le net mais je n'ais pas trouvé comment faire une requêtes URI avec LWP.

    Ne sachant pas ce qu"est réelement URI j'ai pensé faire une requêtes LWP normal! mais le serveur ne me renvoi pas les informations voulu!

    donc si quelqu'un connais la sinthaxe pour faire une requête GET URI (avec un cookie en plus ) ?!

    Merci d'avance.

    edit : ethereal me donne :

    Request method : GET
    Request URI : www.taratata.fr&...&COOKIEMANE=...

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    L'URI ( = Uniform Ressource Identifier) est juste l'adresse demandée par ta requête GET, tu obtiendras le même résultat avec LWP en utilisant la même URI. Maintenant si ce n'est qu'une partie de ta session, n'oublie pas qu'il peut y avoir des cookies et de l'identification, ça tombe bien les deux sujets ont été traités très récemment sur le forum, tu peux aller chercher ces sujets (ils sont encore en première page). Pour plus de détail et un bon tutorial sur LWP, va voir les articles des Mongueurs (LWP, Le Web en Perl 1, 2 et 3 sont un bon départ).

    --
    Jedaï

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut Même problème
    Je pense rencontrer le même problème et je n'ai pas trouvé les sujets qui en parlaient.

    Pour faire simple, lorsque je vais sur http://www.unsite.fr (url bidon ici), diverses requetes sont executées (sniffé par ethereal). En particulier un 'GET /portal/qulequechose'. On peut lire un peu plus loin 'referer : http://www.unsite.fr' (dans la section URI) et un peu lus loin un set-cookie (Cookie effectivement present sur le disque et contenant bien les infos lues dans ethereal).

    extrait de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $ua=LWP::UserAgent->new;	
    $ua->cookie_jar($cookie_jar);
    my $res = $ua->get( $url, ...
    avec $url='/portal/qulequechose', la requete n'aboutit pas
    avec $url='http://www.unsite.fr/portal/qulequechose', cela aboutit mais ce qui m'est retourné est différent : page html differente et pas de set-cookie.

    L'usage d'url relatives est donc mon problème. (J'ai essayé en ajoutant moi même le referer (Referer => 'http...' et c'est pire)).

    Si ce que je raconte n'est pas clair, je peux recopier le contenu d'ethereal dans les deux cas ...

  4. #4
    Membre expérimenté Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    exemple de truc que j'avais fait à l'époque (laquelle? je ne sais plus) pour tester le résultat d'une requete HTTP

    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
    45
    46
     
    #!/usr/bin/perl
    use strict;
    print "Content-Type: text/html\n\n";
    print "<HTML><BODY>\n";
    use LWP::UserAgent;
    use HTTP::Cookies;
     
    my $url2test ="http://test.url.com/blabla.jsp";
     
    # Créé un objet UserAgent
    my $ua = LWP::UserAgent->new;
     
    # Initialise les cookies
    $ua->cookie_jar(
                      HTTP::Cookies->new( file     => "lwpcookies.txt",
                                          autosave => 1
                                        )
                    );
    # Définie le user agent envoyé au serveur
    $ua->agent("Mozilla/8.0" . $ua->agent);
     
    # Créé la requète
    my $req = HTTP::Request->new (GET => $url2test);
    $req->header('Accept' => 'text/html');
     
    # Passe la requete à UserAgent et récupère la réponse
    my $res = $ua->request($req);
     
    # Teste la réponse
    if ($res->is_success) {
       my $content = $res->content;
       $content =~ s/&nbsp;/ /gi;
       # teste la présence de la chaine "test ok" dans la réponse
       if ($content =~ m/test ok/i) {
          print "CONNEXION OK";
       } else {
          print "\n\nCONNEXION KO\n\n";
          print "<FIELDSET><LEGEND>Code</LEGEND><XMP>".$res->content."</XMP></FIELDSET>\n";
       }
    } else {
       print "Error: " . $res->status_line . "\n";
    }
    print "\n</BODY></HTML>\n";
     
    exit;
    si ça peut t'aider

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut
    Citation Envoyé par rcageot
    exemple de truc que j'avais fait à l'époque (laquelle? je ne sais plus) pour tester le résultat d'une requete HTTP

    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
    45
    46
     
    #!/usr/bin/perl
    use strict;
    print "Content-Type: text/html\n\n";
    print "<HTML><BODY>\n";
    use LWP::UserAgent;
    use HTTP::Cookies;
     
    my $url2test ="http://test.url.com/blabla.jsp";
     
    # Créé un objet UserAgent
    my $ua = LWP::UserAgent->new;
     
    # Initialise les cookies
    $ua->cookie_jar(
                      HTTP::Cookies->new( file     => "lwpcookies.txt",
                                          autosave => 1
                                        )
                    );
    # Définie le user agent envoyé au serveur
    $ua->agent("Mozilla/8.0" . $ua->agent);
     
    # Créé la requète
    my $req = HTTP::Request->new (GET => $url2test);
    $req->header('Accept' => 'text/html');
     
    # Passe la requete à UserAgent et récupère la réponse
    my $res = $ua->request($req);
     
    # Teste la réponse
    if ($res->is_success) {
       my $content = $res->content;
       $content =~ s/&nbsp;/ /gi;
       # teste la présence de la chaine "test ok" dans la réponse
       if ($content =~ m/test ok/i) {
          print "CONNEXION OK";
       } else {
          print "\n\nCONNEXION KO\n\n";
          print "<FIELDSET><LEGEND>Code</LEGEND><XMP>".$res->content."</XMP></FIELDSET>\n";
       }
    } else {
       print "Error: " . $res->status_line . "\n";
    }
    print "\n</BODY></HTML>\n";
     
    exit;
    si ça peut t'aider
    Merci mais malheureusement non. J'ai quelquechose de tout à fait équivalent (à la jolie expression régulière près qui reste mystèrieuse pour moi)
    Le problème est que je n'obtiens pas la réponse que je 'devrais' avoir'.

    Voici un peu plus d'explication :

    - Lorsque j'utilise mon browser préféré, ethereal mentionne :
    HTTP GET /portal/?lang=fr... HTTP/1.1
    Request Method: GET
    Request URI: /portal/?lang=fr...
    Request Version: HTTP/1.1
    Accept: image/gif, ...
    Referer: http://www.machin.fr/index.php?frameset=1
    Accept-language: fr
    ...
    Host: www.machin.fr

    Et la réponse :
    HTTP/1.1 200 OK
    Request Version: HTTP/1.1
    Response Code: 200
    Date:...
    Set-Cookie: show_popup=1; ...
    Set-Cookie: php25=1254785684;...
    (C'est bien évidemment le Cookie qui m'intéresse)

    - Lorsque j'utilise HTTP:Request :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $res = $ua->get( $url,
    	User_agent => "Mozilla/4.0 (Compatible; MSIE 6.0; windows NT 5.1)",
    	Host => "www.machin.fr",
    -> avec $url="http://www.machin.fr/index.php?frameset=1/portal/?lang=fr...

    je vois dans ethereal :
    GET /index.php?frameset=1/portal/?lang=fr...
    Request Method: GET
    Request URI: /index.php?frameset=1/portal/?lang=fr...
    Request Version: HTTP/1.1
    Host: www.machin.fr
    ...

    J'obtien en réponse : HTTP/1.1 OK
    MAIS, je reçois une page HTML que j'appellerai 'HtmlPortal' et pas de Set-Cookie. Ma question n'est donc pas interprétée comme ci-dessus.

    -> avec $url="/portal/?lang=fr..."
    et ajout dans le GET de
    Referer: http://www.machin.fr/index.php?frameset=1
    la requête n'aboutit pas.


    A noter si cela peut aider qu'avec mon browser, juste avant HTTP GET /portal/?lang=fr... HTTP/1.1
    je vois :
    HTTP GET /index.php?frameset=1 HTTP/1.1
    Request Method: GET
    Request URI: /index.php?frameset=1
    Referer: http://www.machin.fr

    qui me répond OK et me retourne la page 'HtmlPortal' citée précédemment !!!
    Tout se passe comme si ma requête était interprétée avec
    $url="http://www.machin.fr/index.php?frameset=1
    au lieu de
    $url="http://www.machin.fr/index.php?frameset=1/portal/?lang=fr

  6. #6
    Membre expérimenté Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    à priori si j'ai bien conmpris, ton problème est lié au fait que ton portal utilise des frames
    j'ai trouvé ça ici qui pourrait sans doute t'aider
    http://search.cpan.org/~derhaag/Fram...FramesReady.pm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use LWP::UserAgent::FramesReady;
     
     $ua = new LWP::UserAgent::FramesReady;
     $ua = new LWP::UserAgent::FramesReady({'callback'=>\&callback
          [,'size'=>$size]});
     $ua = new LWP::UserAgent::FramesReady({'nomax'=>1,
          'callback'=>\&LWP::UserAgent::FramesReady::callback
          [,'size'=>$size]});
     
     $response = $ua->request($http_request);

  7. #7
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut
    Citation Envoyé par rcageot
    à priori si j'ai bien conmpris, ton problème est lié au fait que ton portal utilise des frames
    j'ai trouvé ça ici qui pourrait sans doute t'aider
    http://search.cpan.org/~derhaag/Fram...FramesReady.pm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use LWP::UserAgent::FramesReady;
     
     $ua = new LWP::UserAgent::FramesReady;
     $ua = new LWP::UserAgent::FramesReady({'callback'=>\&callback
          [,'size'=>$size]});
     $ua = new LWP::UserAgent::FramesReady({'nomax'=>1,
          'callback'=>\&LWP::UserAgent::FramesReady::callback
          [,'size'=>$size]});
     
     $response = $ua->request($http_request);
    Que dire mon cher ... ce n'est pas une vache que tu as mangé mais un TIGRE !!! En un mot : BRAVO !!!!

    J'ai pu récupérer mon ch'ti cookie ... pour la suite j'espere que je n'aurai plus de frame parce que cela risque de devenir compliqué (les requetes s'enchainent et le 'content' disparait ... j'ai vue une section là dessus mais je verrai plus tard).

    Voici donc mon petit bout de code de test (je n'en ai pas trouvé beaucoup (=0 ) sur la toile ... on doit être deux dans le monde à vouloir faire ça ) :

    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
     
    use strict;
    use LWP::UserAgent;
    use LWP::UserAgent::FramesReady;
    use HTTP::Cookies;
    use HTTP::Request;
     
    my $cookie_jar = HTTP::Cookies->new(
    	file=>'machinCookies.txt',
    	autosave=>1,
    	ignore_discard=>1
    	);
    my $request = HTTP::Request->new(GET => 'http://www.machin.fr');	
     
    my $ua = new LWP::UserAgent::FramesReady;
    $ua = new LWP::UserAgent::FramesReady({'callback'=>\&callback
          });
    # Par ici, il y a quelquechose à faire avec le callback pour s'arreter où on veut et/ou stocker les resultats intermédiaires ... a creuser
    $ua = new LWP::UserAgent::FramesReady({'nomax'=>1,
          'callback'=>\&LWP::UserAgent::FramesReady::callback
          });
    $ua->cookie_jar($cookie_jar);      
    my $response = $ua->request($request);
     
    my $filename="machinCookie.log";
    my $theresult;
    if ($response->is_success) {
    	$theresult=$response->content;
    	open(FICLOG,">$filename");
    	print(FICLOG $theresult);
    	close(FICLOG);
    	print "OK.\n";
    }
    else {
    	print "NOK.\n";
    }
    $cookie_jar->save('machinCookies.txt');
    Pour terminer MEEEERRRRRCCCCCCIIIIIII !
    N'hésites pas à aider d'autres âmes en peine, tu es de TRES bon conseil.

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

Discussions similaires

  1. [debutant]Utiliser des matrices en C
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 20h45
  2. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01
  3. [debutant]Utiliser friend method
    Par Battosaiii dans le forum Débuter
    Réponses: 4
    Dernier message: 06/11/2005, 11h23
  4. [debutant]utilisation de bcp
    Par christophebmx dans le forum Outils
    Réponses: 2
    Dernier message: 19/08/2005, 09h47
  5. [Debutant] Utilisation de la touche "Entrée"
    Par Dextro dans le forum Composants
    Réponses: 2
    Dernier message: 28/04/2005, 09h42

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