72549
最近ネットワーク、パケット通信に興味があって気になるのですが、普段ブラウザがサーバに送信しているPOST通信にはCookie、パラメータ等が多く含まれていると思います。  
それをchromeのdevツール等でコピーしてPythonのrequestsライブラリ等で同じ通信を送信して再現する事は可能なのでしょうか？  
可能な場合、どのように通信コードをコピーして貼り付ければいいのでしょうか？
CC BY-SA 4.0
2020-12-01T13:15:43.967
72329
2020-12-09T17:33:58.747
22565
question
python network cookie session
ブラウザが送信したPOST通信をrequestsで再現したい。
> 普段ブラウザがサーバに送信しているPOST通信にはCookie、パラメータ等が多く含まれていると思います。

はい。

> それをchromeのdevツール等でコピーしてPythonのrequestsライブラリ等で同じ通信を送信して再現する事は可能なのでしょうか？

可能です。

> 可能な場合、どのように通信コードをコピーして貼り付ければいいのでしょうか？

Chromeのdevツールなどで、とのことなのでChromeのDevToolsでの方法を説明します。  
まず `curl` で通信を再現する方法、その次に `curl` から `requests` に変換する方法について解説します。

### `curl` で通信を再現

通信を再現するためにはCookie、URL、パラメータがあれば多くの場合は事足ります。

  1. まず、DevToolsのNetworkタブを開いている状態で、何らかの通信を行うと各リクエストごとの結果が表示されると思います。この中から再現したいものを選び、右クリックして「Copy」→「Copy as cURL」を選択してください。
  2. ターミナルなどにコピーした内容をペーストして実行することで、同様のリクエストを送信することが可能です（curlがインストールされていない場合はインストールして実行してください）。
  3. もしCookieが不足して期待したレスポンスが得られなかったら、DevToolsからCookieを参照し、`curl` の `-b` や `-c` オプションから設定して再度実行してみてください。

### `curl` から `requests` に変換

やることとしてはHTTPメソッド、URL、そして各パラメータを単純に `requests`
に合わせて記述し直すだけなので、ここで解説するより公式のドキュメントを読んでいただくほうが適切でしょう。

  * [Requests: HTTP for Humans™ — Requests 2.25.0 documentation](https://requests.readthedocs.io/en/master/)
  * [Requests: 人間のためのHTTP — requests-docs-ja 1.0.4 documentation](https://requests-docs-ja.readthedocs.io/en/latest/)
    * v1.0.4 向けのものなので古いかもしれません

しかしこれだけだと芸がないので、おすすめのサイトを紹介しておきます。

[Convert cURL command syntax to Python requests, Ansible URI, browser fetch,
MATLAB, Node.js, R, PHP, Strest, Go, Dart, JSON, Elixir, and Rust
code](https://curl.trillworks.com/)

`curl` コマンドの内容を各言語のHTTP通信ライブラリの記法に変換することができ、 `requests` にも対応しています。ですので、先の節での
`curl` コマンドをこのサイトに貼り付けるだけでそのまま `requests` 用コードが完成させられます。便利。
CC BY-SA 4.0
2020-12-09T17:33:58.747
72549
2020-12-09T17:33:58.747
29826
72329
answer