目的
サーバー構築、httpのリクエストに興味があるので、サーバーを立ち上げて簡易的なコードで学習する。
※筆者は情報系の初心者なので悪しからず
環境情報
Macbookpro M2チップ
% sw_vers
ProductName: macOS
ProductVersion: 14.4.1
BuildVersion: 23E224
apache
% httpd -v
Server version: Apache/2.4.58 (Unix)
Server built: Feb 10 2024 01:12:11
実装
概要
1.pythonのパッケージFlaskを利用する
2.curlを用いてHTTP POSTリクエストを送信する
3.サーバーを立ち上げているターミナルでPOSTリクエストの出力を確認する
Code
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
@app.route('/post', methods=['POST'])
def handle_post():
data = request.form
# 受信データをコンソールに出力
print(f"Received POST data: {data}")
# レスポンスを返す
return f"Received POST data: {data}", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
スマホなどの別端末からアクセスするためにはhostに0.0.0.0を指定して全てのインターフェースをバインドする必要がある。(ただし必要ないなら指定なしで問題ない)
注意点
curlでPOSTリクエストする際はContent-Typeが色々あるので注意
→今回は平文を送ったがrequest.formから受け取ることができた
他にはrequest.get_json()やrequest.dataなどある(今後調べていきます!!)
実行
python3 main.py
以下のような表示になる
* Serving Flask app 'main'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://XXX.XX.XX.XX:8080
Press CTRL+C to quit
curlでlocalhostにアクセスする
curl http://localhost:8080
Hello World!%
出力を得ることができた
POSTリクエストを送る
POSTリクエストを送る際にはcurlに-Xと-dのオプションをつける
[-Xの意味]:curlは通常GETリクエストを送信するため-XでPOSTやPUTなどを指定する必要がある
[-d]:POSTリクエストのボディに含めるものを指定できる
curl -X POST http://localhost:8080/post -d "This is a test POST request"
出力結果
Received POST data: ImmutableMultiDict([('This is a test POST request', '')])%
※ImmutableMultiDictとはFlaskにて用いられる特殊なデータ構造で通常の辞書型とは異なりデータの変更ができないImmutaleの辞書型
またサーバー側のターミナルでは
Received POST data: ImmutableMultiDict([('This is a test POST request', '')])
以上のような出力が確認できることからPOSTリクエストを正しく受信できていると確認できる。
感想
リクエストのデータ構造にもっと詳しくなる必要がありそう。またIPアドレスについても知りたい。
参考にしたページ