3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】ブラウザが送信しているHTTP POSTを再現する

Last updated at Posted at 2022-07-10

概要

動的サイトは通常、ブラウザからwebサーバにリクエストを送信し、新しいコンテンツを取得することでページの内容を更新する。
この通信をPython上で再現したい状況がよくあると思うので方法を記載する。
今回はPOSTリクエストを対象とする。

動作環境

python --version
Python 3.7.13

ChromeでPOSTデータを確認する

まずは実際に通信を発生させて中身を確認する。

  1. ChromeのDevToolsの[Network]タブを開く。
    image.png

  2. ブラウザにて再現対象の操作を行い通信を発生させる。
    (ex. フォームへの入力・送信、スクロールなど)

  3. リクエストごとの結果がDevToolsに表示され、クリックすると詳細を確認できる。
    こんな感じ。
    image.png

curlで通信を再現する

Pythonで再現する前にcurlで再現する(方法を確認する)必要がある。

  1. DevTools上のリクエストの結果を右クリックして[Copy]→[Copy as cURL (bash)]を選択する。
  2. コピーしたコマンドをターミナル等で実行すれば同じリクエストを送信できる。

Pythonで通信を再現する

PythonのrequestsライブラリでPOSTリクエストを送信できる。
上述したcurlコマンド内容をrequestsライブラリで使えるように書き換えることでPython上でも同じ通信を再現できる。
requests公式ドキュメントを見ながら手で書き換えてもよいが、
curlから各言語用HTTP通信ライブラリ記法に変換してくれる非常に便利なサイトがあるのでそちらを利用する。
もちろんrequestsに変更可能。
bfotool
ここで変換したPythonコードをそのまま実行するだけで通信を再現できる。

参考

https://btj0.com/blog/web/chrome-post/
https://dev.classmethod.jp/articles/python-requests-low-level-api/
https://python.civic-apps.com/http-request-post-get/
https://hibiki-press.tech/python/requests_module/1882

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?