2021.07.12  

【curlコマンド】セッションを保持して通信する

Linux,  Django    


この記事では、curlコマンドでセッションを維持する方法について紹介します。

次のコマンドはDjangoの管理者画面にcurlコマンドでアクセスしたものです。
認証画面でログイン情報を入力し、その後にセッション情報が必要な画面へアクセスしています。

# 認証画面へアクセス
curl -X GET -c cookie.txt http://127.0.0.1/admin/login/ | grep csrfmiddlewaretoken

# 認証画面でログイン情報を入力してsubmit
curl -i -X POST -b cookie.txt -c cookie.txt \
-d 'username=admin&password=hogehoge&csrfmiddlewaretoken=XXXXX' \
http://127.0.0.1/admin/login/

# ログイン情報を保持していないと接続できないページへアクセス
curl -X GET -b cookie.txt http://127.0.0.1/admin/auth/group/ | grep '<title>'

※ コマンドが長い部分はバックスラッシュで改行しています。

解説

コマンドオプション

まずは、使用しているコマンドオプションを紹介します。

    使用オプション
  1. -X : (-request) 通信時のメソッドを指定できます。
  2. -i : (-include) 今回の処理で必須ではありませんが、使用するとHTTPヘッダーを出力できます。
  3. -c : (-cookie-jar) cookieの情報をファイルに書き込むことができます。
  4. -b : (-cookie ) 使用するとファイルに保存したcookieをHTTPサーバーに送信できます。
  5. -d : (-data) POSTリクエストで指定されたデータをHTTPに送信します。

curlマニュアル:https://docs.oracle.com/cd/E62101_01/html/E62874/curl-1.html


コマンドの内容

次はコマンドの内容について、順を追って解説します。
まずは一番最初のコマンドです。

# 認証画面へアクセス
curl -X GET -c cookie.txt http://127.0.0.1/admin/login/ | grep csrfmiddlewaretoken

Djangoのログインには画面表示時にランダムで生成されるCSRFトークンと、生成したトークンを保持するためのセッション情報が必要となります。

-c オプションを使用することで、セッション情報をcookie.txtに保存しています。

grep csrfmiddlewaretoken はコマンド実行時に出力されるHTMLテキストからCSRFトークンを取得するために記述しています。

実際にコマンドを実行すると次のように表示されます。

<form action="/admin/login/" method="post" id="login-form"><input type="hidden" name="csrfmiddlewaretoken" value="3WtyOAup85bWAQbj128j4RxXLTdHoWZulpgZfoDR0cCgVbBrrRn5u5ghA4pqbAZ8">

value=以降の文字列はCSRFトークンで、次に解説するコマンドで使用します。

また、こちらがcurlコマンドでアクセスを行なっている画面です。



次は2番目のコマンドです。先ほどは上記の画面に対してGETを行い、CSRFトークンを取得しましたが、今回はこちらの画面に対してPOSTメソッドを使用して認証情報を送信します。

# 認証画面でログイン情報を入力してsubmit
curl -i -X POST -b cookie.txt -c cookie.txt \
-d 'username=admin&password=hogehoge&csrfmiddlewaretoken=3WtyOAup85bWAQbj128j4RxXLTdHoWZulpgZfoDR0cCgVbBrrRn5u5ghA4pqbAZ8' \
http://127.0.0.1/admin/login/

-b オプションに先ほど-cオプションで作成したcookie.txtを使用することで、セッション情報を引き継ぐことがきます。

そして再び-c オプションを使用することで認証成功時の情報をcookie.txtに保存します。

-d でサーバーに送信するログイン情報を設定します。

ここでは、username、password、csrfmiddlewaretokenをそれぞれ設定しています。

このパラメータは上記画像の"name"に設定されている名前を使用します。

username には admin。
password には hogehoge。
csrfmiddlewaretoken には 最初のコマンドで出力されたvalue=以降の文字列を設定します。

コマンドが成功すると次のような結果が出力されます。

HTTP/1.1 302 Found
## 中略 ## 
Set-Cookie: csrftoken=1osVZSWmwyIfTwA8q0pNvCgcH1ARnBj7jtEGBxYL2EPBs3XUd5Z63tf8M2KHAfYS; expires=Sat, 09 Jul 2022 07:03:05 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Set-Cookie: sessionid=o0gkwbcctp4ijjdkbh7i1l7j5n2ab7mz; expires=Sat, 24 Jul 2021 07:03:05 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax

最後にログイン済みの状態でのみアクセスできる画面に対してcurlコマンドを実行します。

アクセスする実際の画面がこちらです。

そのままコマンドを実行するとページ内の情報が全て表示されてしまうため、

タブに表示されている "Select group to change" が titleタグに記載されているかを確認します。

curl -X GET -b cookie.txt http://127.0.0.1/admin/auth/group/ | grep '<title>'

| (パイプ) で curl コマンドの実行結果を受け取り、grep で'<title>'タグが含まれる行を検索しています。

こちらを実行すると次のようになります。

<title>Select group to change | Django site admin</title>

これで、curlコマンドでセッションを保持しつつ通信を行えることが確認できました。

検証環境の配布

今回使用した環境はDocker-Composeで作成しています。

実際に検証を行なっていみたい方は、ソースコードをGitにアップロードしているのでご利用ください。

git: https://github.com/ruruyuki/django_container_rest

コンテナの使い方

前提

・DockerとDocker Composeがインストール済みであること。
・コマンドラインで作業すること。

作業手順

・上記URL(Git)からダウンロードしたソースを解凍する。
・解凍したディレクトリに「--master 1」などの記述があれば削除し、
 名前がdjango_container_restとなるようにする。
・django_container_restディレクトリに、コマンドラインで移動する。
・移動したディレクトリ内で以下コマンドを実行する。

docker-compose up -d --build

・Webブラウザで「http://127.0.0.1:80/admin」にアクセスする。
 すると、Djangoの管理画面にアクセスできます。

ユーザー名は「admin」。
パスワードは「hogehoge」でログインすることができます。

関連記事

・ curlコマンドでPOSTする (JSON版)
・ curlコマンドでPOSTする (画面送信版)
・【Python】requestsのsessionとcookiesでPOST通信を検証

コメント
@Asiansfoorp
2023年7月27日0:20
Hello guys! Nice article RURUK BLOG
На веб-сайте MEGA вы можете воспользоваться быстрым поиском по ключевым словам или просмотреть категории товаров, чтобы найти лучшие предложения для себя. Вы сможете изучить конкурентов, ознакомиться с отзывами и удобно оформить сделку на веб-сайте. Все это происходит всего в несколько кликов и максимально просто и безопасно. Мега даркнет - это место, где вы можете найти все, что вам нужно, и быть уверенным в безопасности и анонимности своих сделок. Переходите по ссылке и начинайте исследовать богатый ассортимент позиций на Мега даркнет <a href="https://xn--mga-sb-ph8b.com">https://xn--meg-sb-yc8b.com</a>.


<a href=https://xn--mga-sb-ph8b.com>mega sb</a>

<a href="https://xn--mg-8ma3631a.com">ссылки mega</a>
<a href="https://xn--meg-sb-yc8b.com">mega link</a>
<a href="https://xn--mga-sb-ph8b.com">mega links</a>
<a href="https://xn--meg-sb-yc8b.com">mega gl</a>
<a href="https://xn--meg-cla.com">мега как зайти</a>

ph99bGGoma
@DixieMex
2023年7月28日0:15
Bro - RURUK BLOG - Best info!
-

Кракен магазин <a href="https://xn--krkn-6q5a9f.com">https://xn--krken-ucc.com</a> - это крупный анонимный маркетплейс с огромным ассортиментом товаров и услуг в РФ. На площадке представлены сотни категорий, в которых можно найти предложения от тысяч продавцов. Главное подобрать подходящее, сравнить отзывы, количество продаж и другие особенности. После чего оформить заказ и максимально быстро получить его. Главное, что Kraken гарантирует анонимность и безопасность каждому пользователю, и вы можете доверять проекту. Ссылка на Kraken онион - <a href="https://xn--2rn-7ua.cc">https://xn--2ran-g0a.com</a> . Это рабочее на данный момент зеркало Кракен, которое можно использовать для покупок. Потому переходите на сайте и окунитесь в мир тысяч товаров и услуг. А при возникновении любых трудностей, администрация проекта поможет в их решении.


Re: <a href=https://xn--krken-ucc.com>кракен ссылка тор </a>

jrehfure9o1

<a href=https://aljarmaq.net/post/18604/%D9%85%D8%A6%D8%A7%D8%AA-%D8%A7%D9%84%D9%81%D9%84%D8%B3%D8%B7%D9%8A%D9%86%D9%8A%D9%8A%D9%86-%D9%8A%D8%B4%D9%8A%D8%B9%D9%88%D9%86-%D8%AC%D8%AB%D9%85%D8%A7%D9%86-%D8%B6%D8%AD%D9%8A%D8%A9-%D8%AC%D8%B1%D9%8A%D9%85%D8%A9-%D8%A7%D9%84%D9%82%D8%AA%D9%84-%D9%81%D9%8A-%D9%83%D9%81%D8%B1%D9%85%D9%86%D8%AF%D8%A7>кракен даркнет</a>
<a href=https://www.stadt.sg.ch/news/stsg_medienmitteilungen/2023/05/auslaenderrecht--fachpersonen-beantworten-fragen.html>кракен онион</a>
<a href=https://www.stadt.sg.ch/news/stsg_medienmitteilungen/2023/05/fahrplan-2024--start-oeffentliche-mitwirkung-fuer-veraenderungen.mobileView.html>kraken</a>
<a href=https://aljarmaq.net/public/post/9986/%D8%B4%D9%87%D9%8A%D8%AF-%D8%A8%D8%B1%D8%B5%D8%A7%D8%B5-%D9%82%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%84%D8%A7%D9%84-%D9%81%D9%8A-%D9%86%D8%A7%D8%A8%D9%84%D8%B3>kraken</a>
<a href=https://thenewsworld24.com/news/devotional-news/know-when-will-dhanteras-be-celebrated-on-22-or-24-october/10135/#comment-3191>кракен онион</a>
<a href=https://golbew.de/post/2011/dyndns-update-skript/document_customview#1690222798004411>ссылка на кракен</a>
<a href=https://de.oneill.com/blogs/all/neoprenanzug-groessetabelle?comment=136070299976#comments>ссылка на кракен</a>
<a href=https://www.livejournal.com/login.bml?returnto=https%3A%2F%2Fwww.livejournal.com%2Fupdate.bml&subject=%D0%92%20%D0%A3%D1%81%D1%82%D1%8C-%D0%A3%D1%81%D0%B5%20%D0%BE%D0%B1%D0%BD%D0%B0%D1%80%D1%83%D0%B6%D0%B5%D0%BD%20%D1%82%D1%80%D1%83%D0%BF%20%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD%D1%8B&event=Bro%20-%20%D0%A0%E2%80%99%20%D0%A0%D0%88%D0%A1%D0%83%D0%A1%E2%80%9A%D0%A1%D0%8A-%D0%A0%D0%88%D0%A1%D0%83%D0%A0%C2%B5%20%D0%A0%D1%95%D0%A0%C2%B1%D0%A0%D0%85%D0%A0%C2%B0%D0%A1%D0%82%D0%A1%D1%93%D0%A0%C2%B6%D0%A0%C2%B5%D0%A0%D0%85%20%D0%A1%E2%80%9A%D0%A1%D0%82%D0%A1%D1%93%D0%A0%D1%97%20%D0%A0%D1%98%D0%A1%D1%93%D0%A0%C2%B6%D0%A1%E2%80%A1%D0%A0%D1%91%D0%A0%D0%85%D0%A1%E2%80%B9%20%D0%92%C2%AB%20%D0%A0%E2%80%98%D0%A0%D1%9C%D0%A0%D1%99%20%20-%20Best%20info%21%20%0D%0A-%20%0D%0A%20%0D%0A%D0%92%D0%B0%D0%B6%D0%BD%D0%BE%20%D0%BE%D1%82%D0%BC%D0%B5%D1%82%D0%B8%D1%82%D1%8C,%20%D1%87%D1%82%D0%BE%20Kraken%20-%20%D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%20%D1%87%D0%B0%D1%81%D1%82%D0%BD%D1%8B%D0%B9%20%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD,%20%D0%B0%20%D1%81%D0%B2%D0%BE%D0%B5%D0%B3%D0%BE%20%D1%80%D0%BE%D0%B4%D0%B0%20%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82%D0%BF%D0%BB%D0%B5%D0%B9%D1%81.%20%D0%A2%D1%8B%D1%81%D1%8F%D1%87%D0%B8%20%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B2%D1%86%D0%BE%D0%B2%20%D0%B8%20%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%B2%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B0%D1%8E%D1%82%20%D1%81%D0%B2%D0%BE%D0%B8%20%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B8%20%D0%B7%D0%B4%D0%B5%D1%81%D1%8C,%20%D0%BF%D0%BE%D1%8D%D1%82%D0%BE%D0%BC%D1%83%20%D0%B2%D1%81%D0%B5%D0%B3%D0%B4%D0%B0%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BD%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B2%D1%8B%D0%B3%D0%BE%D0%B4%D0%BD%D0%BE%D0%B5%20%D0%BF
@RaymondGlymn
2023年11月19日5:53

Hellow,Admin, Hi people! Great article, must say.

мега магазин - топовый сервис по продаже товаров особого применения. Наиболее привлектальным для клиента можно отметить моментальные сделки, а так же доступность. После оплаты заказа, вы сразу же сможете забрать товар - не нужно ничего ждать. На сайт MEGA shop можно свободно попасть, если знаешь рабочее зеркало - <a href=https://xn--megsb-vcc.com>мега дарк нет</a>, сайт доступен как через Тор, так и из обычного браузера. Данный сайт является шлюзом направляющим на оригинальный ресурс мега магазин <a href=https://xn--mga-sb-ph8b.com>mega зеркало</a> .


- <a href=https://xn--mg-8ma3631a.com>мега ссылка</a>
- <a href=https://xn--mg-8ma3631a.com>мега.сб</a>
- <a href=https://xn--mg-sb-k11bwg.com>мега магазин</a>
- <a href=https://xn--mg-g5sse.com>мега дарк нет</a>


KTHH2188NIKI66!

コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信