基礎から学ぶPython入門 90日コース | Web・API - Day 46:HTTPの基本

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 46:HTTPの基本を「Webと会話する言葉」として理解する

Web・API編の最初の一歩は、HTTP という仕組みを知ることから始まります。 ブラウザでページを開くときも、スマホアプリがサーバーとやり取りするときも、 その裏側では必ずと言っていいほど HTTP が使われています。

今日は、

  • HTTPとは
  • URL
  • GET
  • POST
  • ヘッダー
  • ステータスコード

という6つのキーワードを、雑誌記事を読むような感覚で、 やわらかく・でもしっかりと、コード例と一緒に理解していきます。

HTTPとは:Webの「会話のルール」

「ブラウザ」と「サーバー」が話すためのプロトコル

HTTPは、ひと言でいうと 「Webでデータをやり取りするための会話のルール」 です。

  • ブラウザ(ChromeやEdgeなど)が「このページ見せて」とサーバーにお願いする
  • サーバーが「いいよ、これがそのページだよ」と返す

この「お願い」と「返事」のやり取りを、決まった形式で行うためのルールが HTTP です。

PythonでAPIを叩くときも、 「HTTPというルールに従って、サーバーにお願いを送る」 というイメージになります。

URL:Web上の「住所」と「部屋番号」

URLの構造をざっくり分解してみる

よく見るURLを、少し分解してみます。

例:

https://example.com/api/users?page=2

これをパーツに分けると、こんな感じです。

  • https://
    • 通信の方法(プロトコル)。HTTPの安全版が HTTPS です。
  • example.com
    • サーバーの住所(ドメイン名)です。
  • /api/users
    • サーバーの中の「どの機能・どのデータにアクセスするか」を表すパスです。
  • ?page=2
    • 追加の情報(クエリパラメータ)。「2ページ目をください」といった指定に使います。

URLは、「どのサーバーの、どの場所に、どんな条件でアクセスするか」 をまとめたものだと考えると分かりやすいです。

GET:情報を「取りに行く」リクエスト

GETは「ください」のリクエスト

HTTPにはいくつかの「メソッド」がありますが、 最もよく使うのが GET です。

  • Webページを開く
  • APIからデータを取得する

こうした「情報を取りに行く」動きは、ほとんどが GET です。

PythonでGETしてみる(requestsライブラリ)

ここでは、人気の requests ライブラリを使って、 シンプルな GET リクエストを送る例を見てみます。

# day46_http_get_basic.py
import requests  # HTTP通信を簡単にしてくれるライブラリです。


def get_example():
    """シンプルなGETリクエストの例です。"""

    # アクセスしたいURLを指定します。
    url = "https://httpbin.org/get"

    # GETリクエストを送ります。
    response = requests.get(url)

    # ステータスコード(成功かどうかの番号)を表示します。
    print("ステータスコード:", response.status_code)

    # レスポンスの中身(テキスト)を表示します。
    print("レスポンス本文:")
    print(response.text)


if __name__ == "__main__":
    get_example()
Python

ここでのポイントは、

  • requests.get(url) が「GETでください」とサーバーにお願いしていること
  • response.status_code が「うまくいったかどうか」を教えてくれる番号であること
  • response.text にサーバーからの返事(本文)が入っていること

です。

POST:情報を「送りつける」リクエスト

POSTは「これ送るから、処理して」のリクエスト

GETが「情報をください」だとすると、 POSTは「このデータを送るから、登録して・処理して」 というイメージです。

  • 会員登録フォームの送信
  • ログイン情報の送信
  • 新しいデータの登録

こうした「何かをサーバーに渡す」場面で、POSTがよく使われます。

PythonでPOSTしてみる(JSONデータを送る)

# day46_http_post_basic.py
import requests


def post_example():
    """シンプルなPOSTリクエストの例です。"""

    url = "https://httpbin.org/post"

    # サーバーに送りたいデータ(辞書)を用意します。
    data = {
        "username": "taro",
        "score": 100
    }

    # POSTリクエストを送ります。json= を使うとJSON形式で送ってくれます。
    response = requests.post(url, json=data)

    print("ステータスコード:", response.status_code)
    print("レスポンス本文:")
    print(response.text)


if __name__ == "__main__":
    post_example()
Python

ポイント:

  • requests.post(url, json=data) で、「JSON形式のデータ」をサーバーに送っています。
  • サーバー側は、このデータを受け取って、登録したり、計算したり、何かしらの処理を行います。

ヘッダー:リクエストやレスポンスに付く「名刺・メモ」

ヘッダーは「付箋メモ」のようなもの

HTTPには、ヘッダー(header) という情報があります。 これは、リクエストやレスポンスにくっついている「追加情報」です。

イメージとしては、

  • 「このデータはJSONだよ」
  • 「このブラウザからアクセスしているよ」
  • 「認証トークンはこれだよ」

といったメモを、リクエストやレスポンスに付箋のように貼り付けている感じです。

リクエストヘッダーを付けてGETしてみる

# day46_http_headers.py
import requests


def get_with_headers():
    """ヘッダー付きのGETリクエストの例です。"""

    url = "https://httpbin.org/headers"

    # 送りたいヘッダー情報を辞書で用意します。
    headers = {
        "User-Agent": "Python-Requests-Example/1.0",
        "X-Custom-Token": "abc123"
    }

    # ヘッダーを付けてGETリクエストを送ります。
    response = requests.get(url, headers=headers)

    print("ステータスコード:", response.status_code)
    print("レスポンス本文:")
    print(response.text)


if __name__ == "__main__":
    get_with_headers()
Python

ポイント:

  • headers= に辞書を渡すことで、リクエストヘッダーを自由に付けられます。
  • 認証が必要なAPIでは、ここに「APIキー」や「トークン」を入れることがよくあります。

ステータスコード:サーバーからの「結果の番号」

ステータスコードは「どうなったか」を教えてくれる

HTTPの世界では、ステータスコード という番号がとても重要です。 これは、サーバーが「リクエストに対してどう応答したか」を表す番号です。

よく使うものをいくつか挙げると:

  • 200:OK(成功)
  • 201:Created(新規作成成功)
  • 400:Bad Request(リクエストがおかしい)
  • 401:Unauthorized(認証が必要・認証失敗)
  • 403:Forbidden(アクセス禁止)
  • 404:Not Found(見つからない)
  • 500:Internal Server Error(サーバー側のエラー)

PythonでAPIを叩くときは、 「ステータスコードを必ずチェックする」 という習慣をつけておくと安全です。

ステータスコードを見て分岐する例

# day46_http_status_check.py
import requests


def get_with_status_check():
    """ステータスコードをチェックして分岐する例です。"""

    url = "https://httpbin.org/status/200"  # ここを 404 や 500 に変えると挙動が変わります。

    response = requests.get(url)

    status = response.status_code
    print("ステータスコード:", status)

    # 成功(200番台)のとき
    if 200 <= status < 300:
        print("成功しました。レスポンスを処理します。")
        # 実際のAPIではここで response.json() などを使って中身を処理します。

    # クライアント側の問題(400番台)のとき
    elif 400 <= status < 500:
        print("リクエストに問題があります。URLやパラメータを確認してください。")

    # サーバー側の問題(500番台)のとき
    elif 500 <= status < 600:
        print("サーバー側でエラーが発生しています。時間をおいて再試行してください。")

    else:
        print("想定外のステータスコードです。")


if __name__ == "__main__":
    get_with_status_check()
Python

ポイント:

  • ステータスコードを見て、「成功なのか」「自分のリクエストが悪いのか」「サーバーが落ちているのか」を判断できます。
  • 業務自動化でAPIを使うときは、ここにログ出力や再試行ロジックを組み込むことが多いです。

Day 46ミニテンプレート:HTTP入門用の小さなツール

最後に、Day 46の要素をまとめた「HTTP入門ミニツール」を示します。 GET・POST・ヘッダー・ステータスコードを一通り触れる構成です。

# day46_http_mini_tool.py
import requests


def get_json(url: str):
    """指定URLにGETしてJSONを受け取る簡易関数です。"""
    print(f"[GET] {url} にアクセスします。")
    response = requests.get(url)

    print("ステータスコード:", response.status_code)

    if response.status_code == 200:
        print("成功しました。JSONを表示します。")
        try:
            data = response.json()  # レスポンスをJSONとして解釈します。
            print(data)
        except ValueError:
            print("JSONとして解釈できませんでした。テキストを表示します。")
            print(response.text)
    else:
        print("成功しませんでした。レスポンス本文:")
        print(response.text)


def post_json(url: str, payload: dict):
    """指定URLにJSONをPOSTする簡易関数です。"""
    print(f"[POST] {url} にデータを送信します。")
    print("送信データ:", payload)

    response = requests.post(url, json=payload)

    print("ステータスコード:", response.status_code)
    print("レスポンス本文:")
    print(response.text)


def main():
    # GETの例
    get_json("https://httpbin.org/get")

    # POSTの例
    payload = {"username": "hanako", "score": 95}
    post_json("https://httpbin.org/post", payload)


if __name__ == "__main__":
    main()
Python

このミニツールを動かしてみると、

  • URLを指定してGETする感覚
  • JSONを受け取る感覚
  • データをPOSTする感覚
  • ステータスコードを確認する習慣

が、手を動かしながら自然と身についていきます。

Day 46のまとめ

Day 46では、HTTPの基本として、

  • HTTPとは「ブラウザやプログラムがサーバーと会話するためのルール」であること
  • URLは「どのサーバーの、どの場所に、どんな条件でアクセスするか」を表す住所+条件であること
  • GETは「情報をください」、POSTは「このデータを送るから処理して」というリクエストであること
  • ヘッダーは「このデータはJSONだよ」「認証トークンはこれだよ」といった付箋メモのような役割を持つこと
  • ステータスコードは「成功・失敗・原因」を番号で教えてくれる重要な指標であること

を整理しました。

ここから先は、このHTTPの基礎の上に、 「APIを叩いてデータを取得する」「外部サービスと連携する」 といった、 より実践的なWeb・API自動化の世界が広がっていきます。

タイトルとURLをコピーしました