🐕
HTTPリクエストの送り方1(curl・form送信・python)
概要
HTTPリクエスト送る方法のメモ。
JavaScriptによる送り方(Ajaxリクエスト)は以下の記事に書いた。
記載した方法一覧
- curlコマンド利用
- HTML(formタグ)利用
- Python(requestsライブラリ)利用
- Python(requestsライブラリ)利用 【セッション管理したいver】
1.curlコマンドによるHTTPリクエスト
基本はcurl <リクエスト先URL>
- メソッドを指定したい場合は-Xオプションを用いる。
- ヘッダー付与したい場合は-Hオプションを用いる。例)
-H "MY_Header: hogehoge"
※Cookieの場合は-Hのほか、-bオプションでもよい。例)-b "cookie1=hoge; cookie2=moge"
- ボディ(パラメータ)を付与したい場合は-dオプションを用いる。例)
-d "test=hoge"
- リクエスト・レスポンスの詳細を確認したい場合は-vオプションを付ける。
例
URL:★★にCookieとヘッダーとボディを付与しPOSTリクエストするcurlコマンド
curl -X POST -v -H "test_header: aaa" -b "test_cookie=bbb" -d "test_body=ccc" ★★
2.HTML(formタグ)によるHTTPリクエスト
フォーム送信を用いてリクエストを送信する(よくあるボタンおしてリクエスト飛ぶやつ)
- formタグのaction属性にリクエスト先URLを指定する。
- formタグのmethod属性でメソッドを指定する。
- inputタグでパラメータを指定する。
※ヘッダーはJS使わないと付与できない。はず
例
URL:★★にボディを付与しPOSTリクエストするフォーム送信
※htmlファイルをブラウザで開いて送信ボタンを押下する
<form action="★★" method="POST">
<input name="test" value="hoge">
<input type="submit" value="送信ボタン">
</form>
3.Python(requestsライブラリ)によるAjaxリクエスト
例
URL:★★にJSONボディとそれに対応するContent-Typeヘッダーを付与し、POSTリクエストするAjaxリクエスト
import requests
import json
# ヘッダーとCookieとJSONパラメータを作成
headers = {"Content-Type": "application/json"}
cookies = {"test_cookie": "aaa"}
data = json.dumps({"test": "hoge"})
# POSTリクエストを送信
response = requests.post("https://enwbf93olc1t.x.pipedream.net/", headers=headers, cookies=cookies, data=data)
# レスポンスを表示
if response.status_code == 200:
print("[200 OK]", response.text)
else:
print("[ERROR]", response.status_code)
4.Python(requestsライブラリ)によるAjaxリクエスト【セッション管理ver】
一連のセッションの下でリクエストの送信を行いたい場合。
例えば1番目にログインのリクエストを行いレスポンスでSet-Cookieヘッダーの内容を記録。2番目以降のリクエストではCookieをリクエストに載せたい時は、requests.Sessionというオブジェクトを利用するとよい。
例
import requests
session = requests.Session()
url = "★★"
login_data = json.dumps({"id":"test","password":"abc"})
# ログインのリクエスト(POSTリクエスト)を送信
login_response = session.post(url + "/login", data=login_data)
# その後のGETリクエスト。ログインのレスポンスでSet-Cookieされていれば、リクエストにCookieヘッダーが自動で付与される
data_response = session.get(url + "/data")
参考
詳解セキュリティコンテスト ~CTFで学ぶ脆弱性攻略の技術
Discussion