2010-03-27 6 views
3

Ces deux versions sont-elles correctes ou est-ce que l'une d'entre elles est préférable?Quelle est la méthode préférée pour accéder aux réponses WWW :: Mechanize?

#!/usr/bin/env perl 
use strict; 
use warnings; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
my $content; 

# 1 
$mech->get('http://www.kernel.org'); 
$content = $mech->content; 
print $content; 

# 2 
my $res = $mech->get('http://www.kernel.org'); 
$content = $res->content; 
print $content; 

Répondre

2

La méthode content() est parfois plus pratique:

$mech->content(...) 

Renvoie le contenu que le mech utilise en interne pour la dernière page demandée. Ordinairement, c'est la même chose que $ mech-> response() -> content(), mais cela peut différer pour les documents HTML si "update_html" est surchargé, et/ou les arguments supplémentaires sont passés à content():

$mech->content(format => 'text') 

Renvoie une version texte de la page, avec tous les balisages HTML supprimés. Cette fonctionnalité nécessite l'installation de HTML :: TreeBuilder, sinon une erreur fatale sera générée.

$mech->content(base_href => [$base_href|undef]) 

Renvoie le document HTML, modifié pour contenir un balisage dans l'en-tête. $ base_href est $ mech-> base() si non spécifié. C'est pratique pour passer le HTML à, par exemple. HTML :: Affichage.

+0

$ mech-> content (format => 'text') ne fonctionne pas avec ma machine (HTML :: TreeBuilder est installé) –

+0

Vérifiez votre version, vous avez besoin de WWW :: Mechanize 1.05_03 ou supérieur (publié en 2004) – rjh

+0

OK ça marche, peut-être que j'étais trunk quand je l'ai essayé, mais y avait-il récemment une version WWW :: Mechanize où cette fonctionnalité ne fonctionnait pas? t travailler avec Perl 5.10.0 ou 5.10.1? –

3

Ils sont tous les deux acceptables. Le second me semble plus propre car il renvoie un objet HTTP::Response approprié sur lequel vous pouvez interroger et appeler des méthodes, et signifie également que si vous faites une autre requête Mechanize, vous aurez toujours accès à l'ancienne réponse HTTP. Avec votre première approche, chaque fois que vous faites une demande, la méthode content va changer pour quelque chose de nouveau, ce qui peut donner lieu à des erreurs. Pour toute méthode, vous devez vérifier $response->is_success ou $mech->success avant d'accéder au contenu, car la demande a peut-être échoué.

+0

À partir de perldoc: les instances autonomes de WWW :: Mechanize ont activé autocheck. Cependant, si WWW :: Mechanize est sous-classé, il est désactivé. –

+1

Oh wow, la dernière fois que j'ai utilisé Mechanize, cette option n'existait pas. C'était en 2008 ... maintenant je me sens vieux :( – rjh

+0

J'ai ajouté autocheck à cause de la façon incroyablement commune pour que les gens entrent dans le canal #perl IRC et se plaignent que le contenu $ mech-> était vide, parce qu'ils ne l'auraient pas Le problème le plus souvent rencontré est le défaut: –

1

$ Le contenu de mech-> est spécifiquement là pour que vous puissiez éviter d'avoir la réponse du résultat. Plus c'est simple, mieux c'est.