1

私がスクリーンスクレイピングしていたサイト(私がクレジットを持っている)は最近サーバーを変更し、ポート80をブロックしました。httpsにポート443を使用できると思っていましたが、タイムアウトエラーが発生しました。新しいWWW::Mechanizeオブジェクトを作成し、get()を使用してサイトをスクレイプしています。

私の質問は、httpsを使用するようになったのでCookieを追加する必要がありますか?

これはクッキージャーを追加する正しい方法ですか?

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

$agent->agent('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100407 Ubuntu/9.10 (karmic) Firefox/3.6.3');

# we need cookies
$agent->cookie_jar(HTTP::Cookies->new);

これはエラーです:

ログインしようとしています...2010-04-2214 :00:08 POSTの
エラー
https:// theURL / j_security_check
ログインプロセスに許可された時間を超えました。続行する場合は、もう一度クリックして要求したリンクを再度クリックするか、ブラウザを閉じて再度開きます(lib / mypackage.pmの40行目)。

これはCookieの問題でもありますか?

ブラウザでサイトにログインしても、ログインまでに60〜90秒かかるように感じますが、ログイン時間を長くする方法はありますか?

4

2 に答える 2

3

WWW::MechanizeはLWP::UserAgentの上に構築されているため、LWP::UserAgentメソッドを使用できます。timeoutデフォルトのタイムアウトは180秒で、これはすでに非常に長いですが、次の方法を使用して、任意の値に変更できます。

 $mech->timeout( $really_long_value );

このタイムアウトは、合計要求時間ではなく、ユーザーエージェントが許容するソケットのアイドル時間です。その時間内にインタラクションを受信しない場合、リクエストは失敗するはずです。

ただし、手動で行っても時間がかかるため、サーバーに問題があるようです。あなたはそのサイトを運営している人にこれを言うかもしれません。そのエラーメッセージは非常に疑わしいものです。サーバーなどの詳細がなければ、何が起こっているのかを伝えるのは非常に困難です。

Cookieの問題については、手動で試すときにHTTP会話を監視するだけです。インタラクティブブラウザが行うことは何でもします。Cookieを送信する場合は、それを実行します。別の形式の認証を使用している場合は、それを実行します。ポート80をオフにしたとき、スキームよりも多くの変更が行われた可能性があります。

于 2010-04-22T15:36:56.527 に答える
1

これは古い記事ですが、SSLサポートは通常デフォルトで有効になっていないため、必ずロードする必要があると思いました。

use WWW::Mechanize;
require IO::Socket::SSL;

さらに、すべてのURLがhttpsで始まることを確認してください。私は3日間のデバッグの後にそれを見つけました。

于 2011-03-01T19:44:24.153 に答える