フリーキーズ | 独学プログラミング

PythonのrequestsライブラリでHTTP通信を簡単マスター!初心者向けガイド

リンドくん

リンドくん

先生、Pythonで外部のAPIからデータを取得したいんですけど、何か良い方法はありますか?

たなべ

たなべ

それならrequestsライブラリが最適だよ!
Pythonで最も人気のあるHTTP通信ライブラリで、シンプルで直感的に使えるんだ。初心者でも簡単に習得できるから安心して。

現代のプログラミングにおいて、外部のWebサービスやAPIとの通信は欠かせない技術です。
天気予報の取得、SNSへの投稿、データベースとの連携など、様々な場面でHTTP通信が必要になります。

Pythonには標準ライブラリとしてurllibがありますが、実際の開発現場ではrequestsライブラリがほぼ標準として使われています。
その理由は、シンプルで直感的なAPIと豊富な機能にあります。

この記事では、Pythonを学び始めたばかりの方でも理解できるよう、requestsライブラリの基本から実践的な使い方まで、ステップバイステップで解説していきます。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

requestsライブラリとは?HTTP通信の基本を理解しよう

リンドくん

リンドくん

そもそもHTTP通信って何ですか?難しそうな感じがするんですが...

たなべ

たなべ

HTTP通信は、インターネット上でデータをやり取りするためのルールなんだ。
例えば、君がブラウザでWebサイトを見るときも、実はHTTP通信が使われているんだよ。

requestsライブラリの特徴

requestsライブラリは、PythonでHTTP通信を行うためのサードパーティライブラリです。
標準ライブラリのurllibよりもはるかに使いやすく、以下のような特徴があります。

  • 直感的なAPI設計 → 人間が読みやすいコードで記述できます
  • 豊富な機能 → 認証、セッション管理、ファイルアップロードなど様々な機能を内蔵
  • 優れたドキュメント → 公式ドキュメントが充実しており、学習しやすい
  • 幅広い採用実績 → 多くの企業やプロジェクトで使用されている実績

HTTP通信の基本概念

HTTP通信を理解するために、まず基本的な概念を押さえておきましょう。

HTTPメソッドは、サーバーに対してどのような操作を行いたいかを示すものです。主なメソッドには以下があります。

  • GET → データの取得(Webページの表示、API情報の取得など)
  • POST → データの送信(フォームの送信、新規データの作成など)
  • PUT → データの更新(既存データの全体更新)
  • DELETE → データの削除

これらのメソッドを使い分けることで、様々な操作を実現できます。

なぜrequestsライブラリが人気なのか

実際のコード例を見れば、requestsライブラリの使いやすさが一目瞭然です。

# 標準ライブラリ(urllib)の場合
import urllib.request
import urllib.parse

response = urllib.request.urlopen('https://api.example.com/data')
data = response.read()

# requestsライブラリの場合
import requests

response = requests.get('https://api.example.com/data')
data = response.json()

このように、requestsライブラリを使うことでより少ないコードで同じ機能を実現できます。
また、エラーハンドリングやレスポンス処理も直感的に行えるため、開発効率が大幅に向上します。

requestsライブラリのインストールと基本的な使い方

リンドくん

リンドくん

requestsライブラリを使ってみたいです!どうやってインストールするんですか?

たなべ

たなべ

とても簡単だよ!pipコマンドを使って一発でインストールできるんだ。
まずはインストールから始めて、基本的な使い方を見ていこう。

インストール方法

requestsライブラリのインストールは非常に簡単です。
ターミナル(コマンドプロンプト)で以下のコマンドを実行するだけです。

pip install requests

# uvの場合はuv add requests

Python環境によっては、以下のコマンドを使用する場合もあります。

pip3 install requests
python -m pip install requests

インストールが完了したら、Pythonスクリプト内で以下のようにインポートできます。

import requests

最初のGETリクエスト

まずは最も基本的なGETリクエストから始めましょう。以下は、JSONPlaceholderという無料のテスト用APIからデータを取得する例です。

import requests

# GETリクエストを送信
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

# ステータスコードを確認
print(f"ステータスコード: {response.status_code}")

# レスポンス内容を表示
print(f"レスポンス内容: {response.text}")

# JSONとして解析
data = response.json()
print(f"タイトル: {data['title']}")

このコードを実行すると、以下のような出力が得られます。

ステータスコード: 200
レスポンス内容: {"userId":1,"id":1,"title":"sunt aut facere...","body":"quia et suscipit..."}
タイトル: sunt aut facere repellat provident occaecati excepturi optio reprehenderit

レスポンスオブジェクトの基本的な属性

requestsライブラリでリクエストを送信すると、Responseオブジェクトが返されます。
このオブジェクトには、レスポンスに関する様々な情報が含まれています。

import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

# よく使用される属性
print(f"ステータスコード: {response.status_code}")
print(f"ヘッダー: {response.headers}")
print(f"レスポンス時間: {response.elapsed}")
print(f"エンコーディング: {response.encoding}")

# リクエストが成功したかを確認
if response.ok:  # status_code が 200-399 の範囲
    print("リクエスト成功!")
    data = response.json()
    print(data)
else:
    print("リクエスト失敗...")

このように、Responseオブジェクトには豊富な情報が含まれており、リクエストの結果を詳細に把握できます。

GET・POSTリクエストの実装方法と実践例

リンドくん

リンドくん

GETは分かりました!でもPOSTリクエストってどう使うんですか?データを送信するときに使うんですよね?

たなべ

たなべ

その通り!POSTはデータをサーバーに送信するときに使うんだ。
フォームの送信やAPIへのデータ投稿など、実際の開発でよく使う機能だよ。具体例を見てみよう。

パラメータ付きGETリクエスト

まず、URLパラメータを含むGETリクエストの方法を見てみましょう。

import requests

# URLパラメータを辞書で指定
params = {
    'userId': 1,
    'completed': False
}

response = requests.get('https://jsonplaceholder.typicode.com/todos', params=params)

print(f"リクエストURL: {response.url}")
print(f"取得したTODO数: {len(response.json())}")

# 結果を表示
todos = response.json()
for todo in todos:
    print(f"- {todo['title']}")

この例では、特定のユーザーの未完了タスクを取得しています。paramsパラメータを使用することで、URLクエリパラメータを簡潔に指定できます。

基本的なPOSTリクエスト

次に、POSTリクエストでデータを送信する方法を見てみましょう。

import requests

# 送信するデータ
new_post = {
    'title': 'Pythonでのリクエスト送信',
    'body': 'requestsライブラリを使って新しい投稿を作成しました',
    'userId': 1
}

# POSTリクエストを送信
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=new_post)

print(f"ステータスコード: {response.status_code}")
print(f"作成された投稿: {response.json()}")

フォームデータの送信

Webフォームのようなデータを送信する場合は、以下のようにdataパラメータを使用します。

import requests

# フォームデータ
form_data = {
    'username': 'python_user',
    'email': 'user@example.com',
    'message': 'requestsライブラリのテストです'
}

# Content-Type: application/x-www-form-urlencoded として送信
response = requests.post('https://httpbin.org/post', data=form_data)

print(f"送信結果: {response.json()}")

ヘッダーの指定

API通信では、認証情報やコンテンツタイプなどの情報をヘッダーで送信することがよくあります。

import requests

# カスタムヘッダーを設定
headers = {
    'User-Agent': 'My Python App 1.0',
    'Authorization': 'Bearer your-api-token-here',
    'Content-Type': 'application/json'
}

data = {
    'name': 'Python学習者',
    'skill_level': '初級'
}

response = requests.post('https://httpbin.org/post', json=data, headers=headers)

# 送信したヘッダーを確認
sent_headers = response.json()['headers']
print(f"送信されたヘッダー: {sent_headers}")

このように、requestsライブラリを使用することで、様々なタイプのHTTPリクエストを簡単に実装できます。

エラーハンドリングと例外処理で堅牢なコードを作る

リンドくん

リンドくん

ネットワークエラーとかで通信が失敗したらどうなるんですか?プログラムが止まっちゃうんでしょうか?

たなべ

たなべ

いい視点だね!実際の開発ではエラーハンドリングが超重要なんだ。
通信エラーやサーバーエラーに適切に対処することで、安定したアプリケーションが作れるよ。

基本的な例外処理

requestsライブラリでは、様々な種類の例外が発生する可能性があります。適切にハンドリングすることで、ユーザーにとって使いやすいアプリケーションを作ることができます。

import requests
from requests.exceptions import RequestException, Timeout, ConnectionError

def safe_api_request(url):
    try:
        # タイムアウトを3秒に設定
        response = requests.get(url, timeout=3)
        
        # HTTPエラーをチェック(4xx, 5xxエラー)
        response.raise_for_status()
        
        return response.json()
        
    except ConnectionError:
        print("接続エラー: インターネット接続を確認してください")
        return None
        
    except Timeout:
        print("タイムアウトエラー: サーバーの応答が遅いです")
        return None
        
    except requests.exceptions.HTTPError as e:
        print(f"HTTPエラー: {e}")
        return None
        
    except RequestException as e:
        print(f"リクエストエラー: {e}")
        return None

# 使用例
data = safe_api_request('https://jsonplaceholder.typicode.com/posts/1')
if data:
    print(f"取得成功: {data['title']}")
else:
    print("データの取得に失敗しました")

ステータスコードによる条件分岐

HTTPステータスコードを確認して、適切な処理を行うことも重要です。

import requests

def handle_api_response(url):
    response = requests.get(url)
    
    if response.status_code == 200:
        print("成功: データを正常に取得")
        return response.json()
        
    elif response.status_code == 404:
        print("エラー: 指定されたリソースが見つかりません")
        return None
        
    elif response.status_code == 500:
        print("サーバーエラー: しばらく待ってから再試行してください")
        return None
        
    else:
        print(f"予期しないステータスコード: {response.status_code}")
        return None

# 使用例
result = handle_api_response('https://jsonplaceholder.typicode.com/posts/999')

リトライ機能の実装

ネットワークの一時的な問題に対応するため、リトライ機能を実装することも有効です。

import requests
import time
from requests.exceptions import RequestException

def request_with_retry(url, max_retries=3, delay=1):
    """
    リトライ機能付きのリクエスト関数
    """
    for attempt in range(max_retries):
        try:
            response = requests.get(url, timeout=5)
            response.raise_for_status()
            return response.json()
            
        except RequestException as e:
            if attempt == max_retries - 1:  # 最後の試行
                print(f"最大試行回数に達しました: {e}")
                return None
            else:
                print(f"試行 {attempt + 1} 失敗: {e}")
                print(f"{delay}秒後に再試行します...")
                time.sleep(delay)

# 使用例
data = request_with_retry('https://jsonplaceholder.typicode.com/posts/1')
if data:
    print("データ取得成功!")
else:
    print("データ取得に失敗しました")

このように、エラーハンドリングを適切に行うことで、予期しない問題が発生した場合でも、ユーザーに分かりやすいメッセージを提供し、アプリケーションの信頼性を高めることができます。

まとめ

リンドくん

リンドくん

requestsライブラリってすごく便利ですね!これでいろんなAPIと連携できそうです。

たなべ

たなべ

その通り!requestsライブラリをマスターすることで、外部サービスとの連携が格段に楽になるんだ。
これからのAI時代には、様々なAPIを活用する能力がとても重要になってくるからね。

この記事では、PythonのrequestsライブラリによるHTTP通信について、基本から実践的な応用まで幅広く解説してきました。

重要なポイントをおさらいしましょう。

  • requestsライブラリは、Pythonで最も人気のあるHTTP通信ライブラリ
  • GET・POSTリクエストの基本的な使い方から、パラメータやヘッダーの指定方法
  • エラーハンドリングによる堅牢なアプリケーション設計

現代のソフトウェア開発において、外部APIとの連携は必須のスキルです。
特にAI時代では、様々なAIサービスのAPIを組み合わせて価値のあるアプリケーションを構築する能力が求められています。

requestsライブラリをマスターすることで、天気予報サービス、SNS API、決済システム、機械学習APIなど、様々な外部サービスと連携したアプリケーションを開発できるようになります。

この記事をシェア

関連するコンテンツ