3

これらのバージョンは両方とも問題ありませんか、それともどちらかを優先しますか?

#!/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;
4

3 に答える 3

3

どちらも許容範囲です。2 番目のものは、クエリを実行してメソッドを呼び出すことができる適切なHTTP::Responseオブジェクトを返し、別のMechanizeリクエストを作成した場合でも古い HTTP レスポンスに引き続きアクセスできることを意味するため、よりクリーンに思えます。最初のアプローチでは、リクエストを行うたびにcontentメソッドが新しいものに変更され、エラーが発生しやすくなります。

ところで、どちらの方法でも、リクエストが失敗した可能性があるため、コンテンツにアクセスする前に$response->is_successまたはを確認する必要があります。$mech->success

于 2010-03-27T16:46:30.483 に答える
2

content()メソッドの方が便利な場合があります。

$mech->content(...)

フェッチされた最後のページに対してメカが内部的に使用するコンテンツを返します。通常、これは $mech->response()->content() と同じですが、"update_html" がオーバーロードされている場合、および/または追加の名前付き引数が content() に渡されている場合、これは HTML ドキュメントでは異なる場合があります。

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

すべての HTML マークアップが削除された、ページのテキストのみのバージョンを返します。この機能を使用するには、HTML::TreeBuilder をインストールする必要があります。そうしないと、致命的なエラーがスローされます。

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

ヘッダーにマークアップを含むように変更された HTML ドキュメントを返します。指定されていない場合、$base_href は $mech->base() です。これは、HTML を HTML::Display などに渡すのに便利です。

于 2010-03-27T17:06:21.687 に答える
1

$mech->content は具体的にそこにあるため、結果の応答を取得する必要がありません。シンプルであればあるほど良いです。

于 2010-03-31T21:25:41.667 に答える