ブラウザ経由でhttpフォーム投稿を記録する 質問する

ブラウザ経由でhttpフォーム投稿を記録する 質問する

ウェブサイトへのログインとフォームの送信を自動化しようとしています。

HTTP GET および POST リクエストを、後で再生できる形式で記録できるブラウザ プラグイン (Firefox または Chrome 用) はありますか? curl や wget などのスクリプトから自動化できるものを探しています。

Chrome 開発者ツールを使用して POST フォーム データをキャプチャしようとしましたが、wget でリクエストを複製しようとするとエラーが発生し、Cookie やその他のパラメータが不足していることがわかりました。試行錯誤を何度も繰り返すのではなく、これを自動化できる優れた方法があれば理想的です。

ベストアンサー1

単純なやり取りの場合、リクエストを記録して再生する Selenium のようなツールは実際には必要ありません。

必要なのはすでに述べたツールだけです:

  1. Chrome には必要な開発者ツールがすでに付属しています。ネットワーク タブを使用してください。プラグインをダウンロードする必要はありません。Safari が動作するかどうかはわかりません。Safari の開発者ツールには「ネットワーク」タブがありません。
  2. curlとはどちらもwgetCookie と POST データをサポートしていますが、自動化には curl のみを試しました。

適切に実行する必要がある重要な手順がいくつかあります (これにはある程度の経験が必要です)。

  1. 要求されるページのシーケンスは、実際のユーザー インタラクションをモデル化する必要があります。バックエンドがフォームや認証をどのように処理するかは正確にはわからないため、これは重要です。ここで、Chrome のデベロッパー ツールの [ネットワーク] タブが役立ちます (ログのクリアを防ぐ [記録] ボタンがあることに注意してください)。分析のために実際のユーザー インタラクションをログに記録する準備をするときは、各セッションの開始時に Cookie をクリアすることを忘れないでください。
  2. クッキーとリダイレクトが適切に処理されるようにするにはcurl、の適切なオプションをすべて使用する必要があります。wget
  3. すべてのPOSTフォームフィールドは送信する必要がある可能性が高いです(多くの場合、フィールドはナンス値で保護されます)。CSRF

これは私が書いた3つのcurl呼び出しのサンプルです。自動化スクリプトISP からブロードバンドの使用状況をダウンロードするために書いたもの:

curl \
    --silent \
    --location \
    --user-agent "$USER_AGENT" \
    --cookie-jar "$COOKIES_PATH.txt" \
    'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' >$USAGE_PATH-1.html 2>&1 && sleep 3 &&

# --location because the previous request returns with a series of redirects "302 Moved Temporarily" or "302 Found"
curl \
    --silent \
    --location \
    --user-agent "$USER_AGENT" \
    --cookie "$COOKIES_PATH.txt" \
    --cookie-jar "$COOKIES_PATH.txt" \
    --referer 'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' \
    --data "spEntityID=https://www.optuszoo.com.au/shibboleth&j_principal_type=ISP&j_username=$OPTUS_USERNAME&j_password=$OPTUS_PASSWORD&j_security_check=true" \
    'https://idp.optusnet.com.au/idp/optus/Authn/Service' >$USAGE_PATH-2.html 2>&1 && sleep 1 &&

curl \
    --silent \
    --location \
    --user-agent "$USER_AGENT" \
    --cookie "$COOKIES_PATH.txt" \
    --cookie-jar "$COOKIES_PATH.txt" \
    --referer 'https://www.optuszoo.com.au/' \
    'https://www.optuszoo.com.au//r/ffmu' >$USAGE_PATH-3.html 2>/dev/null

--cookie-jar、、およびを慎重に使用することに注意してください。 --cookie、、--locationおよびsleepは必須ではない可能性があります (バックエンドがチェックしない可能性があります) が、これらは十分に単純なので--user-agent--refererエラーの可能性を最小限に抑えるために含めています。

この例では、動的な POST フィールド (CSRF 対策 nonce フィールドなど) がなかったのは幸運でした。動的な POST フィールドを抽出して後続のリクエストに渡す必要はありませんでした。これは、この自動化が認証用であるためです。他の種類の Web インタラクションを自動化する場合は、ユーザーがログインした後、これらの動的に生成されるフィールドがさらに多く発生する可能性があります。

おすすめ記事