1

当社が正規代理店である製品カタログの抽出を自動化する必要があります。その会社は Ingram Micro で、彼らは巨大ですが、カタログと在庫を照会する (Web サービスのような) 簡単な方法を提供していません。オンライン ストア データベース用です。

最近、彼らは Web サイトを変更しましたが、Perl スクリプトが正常にログインするのを妨げていることを検出できないものがあります。ブラウザで直接試行すると、ログインに成功しますが、Perl からフォームを送信しようとすると、ログイン ページが再度表示されます (ログインに失敗した場合と同様)。

彼らのサイトは AspNet で作成されており、ASP によって生成された非表示のフォーム フィールドでいっぱいです。最初は、ログイン ページを取得し、すべての非表示フィールドの値を読み取り、それらをユーザー名とパスワードとともに POST ログイン要求に含めるために独自の「スパイダー」を実行していましたが、この問題の後、WWW の使用を開始しました。 :リクエストを実行するように機械化し、そのタスクを正しく自動化します。

しかし、WWW::Mechanize や LWP::UserAgent は正常にログインできません。

ブラウザとサーバーの間の正確な HTTP 会話を調べてみたり、正しい POST コンテンツを含む自動化されたリクエストに同じ正確なヘッダーを含めたり、Perl からのログインに失敗したり、Perl からのログインに成功したりしましたブラウザ。

私は本当に絶望的です.問題を検出することができず、このカタログの更新なしではストアを実行できません.

ログインページはこちらからご覧いただけます: https://www.imstores.com/ingrammicromx/

誰かが同様の問題を経験したことがある場合、または誰かがそのページを見て、ブラウザが WWW::Mechanize リクエストと異なる理由を検出できる場合は、お知らせください。

ありがとうございました。

4

1 に答える 1

5

通常、私はこの方法を使用して、何が問題なのかをテストします。

  1. ブラウザのすべての Cookie を消去します
  2. Javascript を無効にする
  3. ログインページを開く
  4. ログインしてみる

button => "submit_button_name"ログインに成功した場合は、追加のトリックなしで WWW::Mechanize を使用してこれを行うことができます。次のように使用することを忘れないでください。

$mech->submit_form(
    with_fields => {
        login_field_field => $login,
        password_field_name => $password,
    },
    button => "submit_button_name",
);

Javascript を無効にしてブラウザーからログインできない場合でも、Mechanize でこれを行うことができますが、ブラウザーの HTTP 要求 (私はこれに HTTPFox を使用します) を見て、まったく同じ要求(ヘッダーを含む) を Mechanize から行う必要があります。

于 2013-04-01T13:37:38.030 に答える