1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

httpのリクエストについて勉強してみた

Posted at

目的

サーバー構築、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

main.py
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アドレスについても知りたい。

参考にしたページ

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?