【bat】バッチファイルでAPIを呼び出してデータ取得する方法(curl/wget利用)

【bat】バッチファイルでAPIを呼び出してデータ取得する方法(curl/wget利用) bat
スポンサーリンク

はじめに:バッチファイルからAPIを呼び出す方法

Windows環境でバッチファイル(.bat)を使って定期的なデータ取得や通知送信を自動化したい場面は多くあります。本記事では curl.exewget を使って、REST APIへのリクエストをバッチファイルから行う方法を体系的に解説します。

この記事で学べること

  • curl.exe でのGET / POST / 認証付きAPIリクエスト
  • JSONレスポンスの保存・PowerShellでの値抽出
  • エラーハンドリング・リトライ処理
  • wget の導入とファイルダウンロード
  • プロキシ・SSL対応とセキュリティ設計
  • 天気API・Slack通知の実践テンプレート

curl.exe と wget の概要

curl.exe は Windows 10 バージョン 1803(2018年)以降、OS標準で搭載されたHTTPクライアントです。追加インストール不要でバッチから即座に利用できます。一方 wget は GNU プロジェクトのダウンロードツールで、ミラーリングや再帰ダウンロードに強みがあります。どちらもAPIコールの用途に使えますが、REST APIを扱う場面では curl.exe が主流です。

ツール Windows標準 主な用途 JSONの扱い
curl.exe Win10 1803以降 標準搭載 REST API呼び出し全般 オプションで送受信可能
wget 別途インストール必要 ファイルダウンロード・ミラー 受信は可能
PowerShell 標準搭載(Win7以降) JSON解析・複雑な処理 ConvertFrom-Json で完全対応

注意:Windows 7/8.1では curl.exe が標準搭載されていません。これらの環境では別途 curl をダウンロードするか、PowerShell の Invoke-WebRequest を利用してください。

curl.exe 基礎 – GETリクエスト

まずは最もシンプルなGETリクエストから始めましょう。コマンドプロンプト(cmd)で直接実行することも、バッチファイルに記述することもできます。

基本構文

コマンドプロンプト / バッチファイル
REM GETリクエストの基本
curl "https://api.example.com/data"

REM レスポンスボディのみ表示(進捗バー非表示)
curl -s "https://api.example.com/data"

REM ヘッダーも含めて表示
curl -i "https://api.example.com/data"

REM 詳細情報(デバッグ用)
curl -v "https://api.example.com/data"

バッチファイルでのGETリクエスト

get_request.bat
@echo off
setlocal

set API_URL=https://jsonplaceholder.typicode.com/todos/1

REM APIにGETリクエストを送信
curl -s %API_URL%

echo.
echo 完了
endlocal

ポイント:@echo off をファイル先頭に記述することで、実行コマンド自体がコンソールに表示されなくなります。デバッグ中は @echo on に変えて確認しましょう。

レスポンスの保存と確認方法

APIのレスポンスをファイルに保存すると、後続処理での解析や、ログとしての保持が容易になります。

save_response.bat
@echo off
setlocal

set API_URL=https://jsonplaceholder.typicode.com/posts/1
set OUTPUT_FILE=response.json

REM レスポンスをファイルに保存(-o オプション)
curl -s -o %OUTPUT_FILE% %API_URL%

REM ステータスコードのみ取得
for /f "delims=" %%i in ('curl -s -o NUL -w "%%{http_code}" %API_URL%') do set HTTP_CODE=%%i

echo HTTPステータスコード: %HTTP_CODE%
echo レスポンスを %OUTPUT_FILE% に保存しました

REM ファイル内容を確認
type %OUTPUT_FILE%

endlocal

-w "%{http_code}" オプションでHTTPステータスコードを変数に取り込めます。200番台なら成功、400・500番台はエラーとして後続処理を分岐させるのが定石です。

curl オプション 意味 使用場面
-s サイレントモード(進捗表示なし) バッチ処理時は常に推奨
-o ファイル名 レスポンスをファイルに保存 JSON解析・ログ保存
-w "%{http_code}" ステータスコードを出力 エラー判定
-D ファイル名 レスポンスヘッダーをファイルに保存 Cookie・トークン取得
--max-time 秒数 タイムアウト設定(全体) ハング防止
--connect-timeout 秒数 接続タイムアウト DNS/接続遅延対策

HTTPヘッダーと認証(Bearer / APIキー)

多くのAPIはアクセストークンやAPIキーによる認証を必要とします。curl.exe では -H オプションでカスタムヘッダーを付加できます。

Bearer トークン認証

bearer_auth.bat
@echo off
setlocal

set TOKEN=your_access_token_here
set API_URL=https://api.example.com/protected/data

REM Bearer トークン認証
curl -s -H "Authorization: Bearer %TOKEN%" %API_URL%

endlocal

APIキー認証(ヘッダー方式)

apikey_auth.bat
@echo off
setlocal

set API_KEY=your_api_key_here
set API_URL=https://api.example.com/data

REM X-API-Key ヘッダーでAPIキーを送信
curl -s -H "X-API-Key: %API_KEY%" -H "Accept: application/json" %API_URL%

REM Basic認証(ユーザー名:パスワード)
curl -s -u "username:password" %API_URL%

endlocal

注意:APIキーやトークンをバッチファイルにハードコードするのはセキュリティリスクです。環境変数ファイル(.env)から読み込む方式や、Windowsの資格情報マネージャーを利用することを推奨します。詳細はセキュリティセクションで解説します。

POSTリクエスト(JSONボディ送信)

データを送信する場合はPOSTメソッドを使います。APIの多くはリクエストボディにJSON形式のデータを期待します。

インラインJSONでのPOST

post_json.bat
@echo off
setlocal

set API_URL=https://jsonplaceholder.typicode.com/posts

REM JSONボディをインラインで指定
curl -s -X POST ^
  -H "Content-Type: application/json" ^
  -d "{"title":"テスト投稿","body":"本文内容","userId":1}" ^
  %API_URL%

endlocal

JSONファイルからのPOST(推奨)

複雑なJSONボディはファイルに書いておくとエスケープの手間が省けます。

request_body.json
{
  "title": "バッチからのテスト投稿",
  "body": "バッチファイルからAPIを呼び出しています",
  "userId": 1
}
post_from_file.bat
@echo off
setlocal

set API_URL=https://jsonplaceholder.typicode.com/posts
set BODY_FILE=request_body.json

REM JSONファイルからボディを読み込む(@ プレフィックスを使用)
curl -s -X POST ^
  -H "Content-Type: application/json" ^
  -d "@%BODY_FILE%" ^
  %API_URL%

endlocal

ポイント:-d "@ファイル名"@ はファイルからデータを読み込む指示です。バッチファイル内でJSONを直接書く場合、ダブルクォートを " でエスケープする必要があります。ファイル方式ならエスケープ不要で管理も楽になります。

クエリパラメータとURLエンコード

GETリクエストでは検索条件などをURLのクエリパラメータとして付加します。日本語や特殊文字はURLエンコードが必要な場合があります。

query_params.bat
@echo off
setlocal

REM クエリパラメータをURLに直接記述
curl -s "https://jsonplaceholder.typicode.com/posts?userId=1&_limit=5"

REM --data-urlencode でURLエンコードを自動処理(GETの場合は -G と併用)
curl -s -G ^
  --data-urlencode "keyword=バッチファイル" ^
  --data-urlencode "page=1" ^
  "https://api.example.com/search"

REM 変数を使う場合
set USER_ID=1
set LIMIT=10
curl -s "https://jsonplaceholder.typicode.com/posts?userId=%USER_ID%&_limit=%LIMIT%"

endlocal

JSONレスポンスから値を抽出する(PowerShell ConvertFrom-Json)

バッチファイル単体ではJSONを解析する機能がないため、PowerShellを呼び出して値を抽出する方法が最も実用的です。

特定フィールドの抽出

extract_json.bat
@echo off
setlocal

set API_URL=https://jsonplaceholder.typicode.com/todos/1

REM レスポンスをファイルに保存
curl -s -o response.json %API_URL%

REM PowerShellでJSONを解析してフィールドを取得
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content response.json | ConvertFrom-Json).title"') do set TITLE=%%i

for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content response.json | ConvertFrom-Json).completed"') do set COMPLETED=%%i

echo タイトル: %TITLE%
echo 完了状態: %COMPLETED%

endlocal

ネストしたJSONフィールドの抽出

extract_nested.bat
@echo off
setlocal

REM ネストしたフィールドはドット記法でアクセス
REM 例: {"user": {"name": "Taro", "age": 30}}
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content response.json | ConvertFrom-Json).user.name"') do set USER_NAME=%%i

REM 配列の最初の要素
REM 例: {"items": [{"id": 1, "name": "A"}]}
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content response.json | ConvertFrom-Json).items[0].name"') do set ITEM_NAME=%%i

echo ユーザー名: %USER_NAME%
echo アイテム名: %ITEM_NAME%

endlocal

PowerShell JSON抽出チートシート

  • .field → 単一フィールド取得
  • .parent.child → ネストフィールド取得
  • .array[0] → 配列の要素取得
  • .array.Count → 配列の要素数
  • ($json | Select-Object -ExpandProperty field) → 代替構文
  • ($json.items | Where-Object {$_.id -eq 1}).name → 条件フィルタ

エラー処理と errorlevel の扱い

バッチファイルでAPIを呼び出す際、ネットワークエラーやHTTPエラーへの対処が欠かせません。curl.exe は終了コード(errorlevel)でエラーを通知します。

curl の終了コード一覧

終了コード 意味 主な原因
0 成功 正常完了
6 ホスト名解決失敗 DNS エラー・ネットワーク未接続
7 接続失敗 サーバーダウン・ポート番号誤り
22 HTTP エラー -f オプション使用時の 4xx/5xx エラー
28 タイムアウト --max-time の時間超過
35 SSL接続エラー 証明書エラー・プロトコル不一致
60 SSL証明書検証失敗 自己署名証明書・期限切れ

エラーハンドリングの実装

error_handling.bat
@echo off
setlocal

set API_URL=https://api.example.com/data

REM -f オプション: HTTPエラーで終了コード22を返す
curl -s -f -o response.json %API_URL%

REM curl の終了コードを確認
if errorlevel 1 goto :ERROR

REM HTTPステータスコードも確認
for /f "delims=" %%i in ('curl -s -o NUL -w "%%{http_code}" %API_URL%') do set HTTP_CODE=%%i

if %HTTP_CODE% NEQ 200 goto :HTTP_ERROR

echo API呼び出し成功(HTTP %HTTP_CODE%
goto :END

:ERROR
echo エラー: curl の実行に失敗しました(ネットワークエラーの可能性)
exit /b 1

:HTTP_ERROR
echo エラー: HTTPステータスコード %HTTP_CODE%
exit /b 1

:END
endlocal

リトライ処理と指数バックオフ

ネットワークの一時的な不安定やAPIのレート制限(Rate Limiting)に備えて、リトライ処理を実装するのがベストプラクティスです。指数バックオフ(Exponential Backoff)は、リトライのたびに待機時間を増やすことで、サーバー負荷を軽減します。

retry_with_backoff.bat
@echo off
setlocal enabledelayedexpansion

set API_URL=https://api.example.com/data
set MAX_RETRY=3
set RETRY_COUNT=0
set WAIT_SEC=2

:RETRY_LOOP
set /a RETRY_COUNT+=1
echo 試行 !RETRY_COUNT! / %MAX_RETRY%

curl -s -f --max-time 30 -o response.json %API_URL%

if not errorlevel 1 goto :SUCCESS

if !RETRY_COUNT! GEQ %MAX_RETRY% goto :FAILED

echo 失敗。!WAIT_SEC!秒後にリトライします...
timeout /t !WAIT_SEC! /nobreak > nul

REM 指数バックオフ(待機時間を2倍に)
set /a WAIT_SEC=!WAIT_SEC!*2

goto :RETRY_LOOP

:SUCCESS
echo API呼び出し成功
goto :END

:FAILED
echo エラー: %MAX_RETRY%回の試行がすべて失敗しました
exit /b 1

:END
endlocal

ポイント:setlocal enabledelayedexpansion!変数名! を使うことで、ループ内での変数値の更新が反映されます。通常の %変数名% はブロック実行時に一度だけ展開されるため、ループ内では正しい値が得られない場合があります。

wget を使う方法

wget は Windows には標準搭載されていませんが、GNU の公式サイトやパッケージマネージャーからインストールできます。ファイルダウンロードやミラーリングに特化した豊富なオプションを持っています。

インストール方法

方法 コマンド / 手順 特徴
Winget winget install GnuWin32.Wget Windows 10/11 なら推奨
Chocolatey choco install wget Choco 導入済み環境向け
Scoop scoop install wget 管理者権限不要
手動インストール gnuwin32.sourceforge.net からダウンロード インターネット環境があれば可

wget の基本的なAPIコール

wget_basic.bat
@echo off
setlocal

REM GETリクエストとファイル保存
wget -q -O response.json https://jsonplaceholder.typicode.com/todos/1

REM ヘッダーを追加(--header オプション)
wget -q -O response.json ^
  --header="Authorization: Bearer your_token" ^
  --header="Accept: application/json" ^
  https://api.example.com/data

REM POST リクエスト
wget -q -O response.json ^
  --post-data='{"key":"value"}' ^
  --header="Content-Type: application/json" ^
  https://api.example.com/post

REM タイムアウト設定
wget -q -O response.json --timeout=30 --tries=3 https://api.example.com/data

endlocal

ファイルダウンロードとSHA256検証

バッチファイルを使ってファイルをダウンロードし、整合性をSHA256ハッシュで検証するパターンは、自動更新スクリプトやCI/CD環境で頻繁に使われます。

download_and_verify.bat
@echo off
setlocal

set DOWNLOAD_URL=https://example.com/software-v1.0.zip
set OUTPUT_FILE=software-v1.0.zip
set EXPECTED_HASH=abc123def456...(公式サイトに記載されているSHA256)

REM ファイルをダウンロード
curl -s -L -o %OUTPUT_FILE% %DOWNLOAD_URL%

if errorlevel 1 (echo ダウンロード失敗 & exit /b 1)

REM SHA256ハッシュを計算(certutil コマンドを使用)
for /f "skip=1 tokens=* delims=" %%i in ('certutil -hashfile %OUTPUT_FILE% SHA256') do (
  if "%%i" NEQ "CertUtil: -hashfile コマンドは正常に完了しました。" (
    set ACTUAL_HASH=%%i
  )
)

REM ハッシュを比較(スペースを削除して比較)
set ACTUAL_HASH=%ACTUAL_HASH: =%

if /i "%ACTUAL_HASH%"=="%EXPECTED_HASH%" (
  echo ハッシュ検証成功: ファイルは正常です
) else (
  echo エラー: ハッシュが一致しません。ファイルが破損しているか改ざんされた可能性があります
  del %OUTPUT_FILE%
  exit /b 1
)

endlocal

ポイント:Windows 標準の certutil -hashfile コマンドを使えば、外部ツール不要でSHA256、MD5、SHA1などのハッシュを計算できます。-L オプションはリダイレクト(301/302)に自動追従するためのものです。

プロキシ環境での設定

社内ネットワークなどプロキシが必要な環境では、curl と wget それぞれにプロキシ設定が必要です。

proxy_settings.bat
@echo off
setlocal

set PROXY_HOST=proxy.company.com
set PROXY_PORT=8080
set PROXY_USER=username
set PROXY_PASS=password

REM curl でプロキシを指定
curl -s -x %PROXY_HOST%:%PROXY_PORT% -U %PROXY_USER%:%PROXY_PASS% https://api.example.com/data

REM 環境変数でプロキシを設定(curl が自動認識)
set HTTP_PROXY=http://%PROXY_USER%:%PROXY_PASS%@%PROXY_HOST%:%PROXY_PORT%
set HTTPS_PROXY=https://%PROXY_USER%:%PROXY_PASS%@%PROXY_HOST%:%PROXY_PORT%
curl -s https://api.example.com/data

REM プロキシをスキップするホスト(NO_PROXY)
set NO_PROXY=localhost,127.0.0.1,.local

REM wget でプロキシを指定
wget -q -O response.json ^
  -e "http_proxy=http://%PROXY_USER%:%PROXY_PASS%@%PROXY_HOST%:%PROXY_PORT%" ^
  https://api.example.com/data

endlocal

SSL証明書エラーの対処法

開発環境や社内システムでは自己署名証明書(オレオレ証明書)が使われることがあります。その場合、SSL検証エラーが発生しますが、適切な対処法を選択することが重要です。

証明書エラーの種類と対処法

エラー種別 対処法 推奨度
自己署名証明書 --cacert で証明書ファイルを指定 推奨
期限切れ証明書 管理者に更新を依頼 根本対処
テスト環境のみ -k / --insecure で検証スキップ 開発時のみ
中間CA証明書不足 --cacert でCA束ファイルを指定 推奨
ssl_handling.bat
@echo off
setlocal

REM 推奨: 自己署名証明書ファイルを指定
curl -s --cacert ./certs/custom_ca.crt https://internal.company.com/api

REM 開発・テスト用のみ: SSL検証を無効化(本番では絶対に使わない)
curl -s -k https://dev.internal.local/api

REM Windows の信頼済み証明書ストアを使う方法
curl -s --ssl-no-revoke https://api.example.com/data

REM wget での SSL スキップ(テスト用のみ)
wget -q --no-check-certificate -O response.json https://dev.internal.local/api

endlocal

注意:-k / --insecure は中間者攻撃(MITM)のリスクがあります。本番環境や機密データを扱うAPIには絶対に使用しないでください。開発環境でのみ一時的に使用し、運用に移す前に必ず --cacert に切り替えてください。

実践テンプレート:天気API取得バッチ(OpenWeatherMap想定)

OpenWeatherMap の無料APIを使って、現在の天気情報を取得・表示するバッチファイルの完全なテンプレートです。同様のパターンで他のAPIにも応用できます。

get_weather.bat
@echo off
setlocal enabledelayedexpansion

REM ========================================
REM 天気情報取得バッチ(OpenWeatherMap API)
REM ========================================

set API_KEY=your_openweathermap_api_key
set CITY=Tokyo
set UNITS=metric
set LANG=ja
set LOG_FILE=weather_log.txt
set TEMP_FILE=weather_response.json

REM タイムスタンプ取得
for /f "delims=" %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HH:mm:ss"') do set TIMESTAMP=%%i

echo [%TIMESTAMP%] 天気情報を取得中...

REM APIリクエスト(リトライ付き)
set RETRY=0
:WEATHER_RETRY
set /a RETRY+=1

curl -s -f --max-time 15 -o %TEMP_FILE% ^
  "https://api.openweathermap.org/data/2.5/weather?q=%CITY%&appid=%API_KEY%&units=%UNITS%&lang=%LANG%"

if errorlevel 1 (
  if !RETRY! LSS 3 (
    echo リクエスト失敗。リトライします...
    timeout /t 5 /nobreak > nul
    goto :WEATHER_RETRY
  )
  echo エラー: APIリクエストに失敗しました >> %LOG_FILE%
  exit /b 1
)

REM JSONから天気情報を抽出
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content weather_response.json | ConvertFrom-Json).main.temp"') do set TEMP=%%i
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content weather_response.json | ConvertFrom-Json).weather[0].description"') do set DESCRIPTION=%%i
for /f "delims=" %%i in ('powershell -NoProfile -Command "(Get-Content weather_response.json | ConvertFrom-Json).main.humidity"') do set HUMIDITY=%%i

REM 結果表示とログ出力
echo ==========================
echo 都市: %CITY%
echo 気温: %TEMP%
echo 天候: %DESCRIPTION%
echo 湿度: %HUMIDITY% %%
echo ==========================

REM ログファイルに書き込み
echo [%TIMESTAMP%] %CITY%: %TEMP%℃, %DESCRIPTION%, 湿度%HUMIDITY%%% >> %LOG_FILE%

REM 一時ファイルを削除
del %TEMP_FILE%

endlocal

実践テンプレート:Slack通知バッチ

Slackの Incoming Webhook を使ってバッチファイルから通知を送信するテンプレートです。バッチ処理の完了通知やエラーアラートとして広く使われています。

slack_notify.bat
@echo off
setlocal

REM ========================================
REM Slack Incoming Webhook 通知バッチ
REM ========================================

set WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/xxxxxxxxxxxxxxxxxxxxxxxx
set CHANNEL=#notifications
set MESSAGE=バッチ処理が完了しました

REM シンプルな通知
curl -s -X POST ^
  -H "Content-Type: application/json" ^
  -d "{"text":"%MESSAGE%"}" ^
  %WEBHOOK_URL%

echo.
echo Slack通知を送信しました

endlocal

リッチなSlack通知(Block Kit使用)

slack_rich_notify.bat
@echo off
setlocal

set WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz

REM JSONをファイルに書き出してから送信(日本語対応・複雑なメッセージ向け)
(
  echo {
  echo   "text": "バッチ処理完了レポート",
  echo   "blocks": [
  echo     {
  echo       "type": "header",
  echo       "text": {"type": "plain_text", "text": "✅ バッチ処理完了"}
  echo     },
  echo     {
  echo       "type": "section",
  echo       "text": {"type": "mrkdwn", "text": "*処理名:* データ同期
*件数:* 1,234件
*所要時間:* 3分45秒"}
  echo     }
  echo   ]
  echo }
) > slack_payload.json

curl -s -X POST ^
  -H "Content-Type: application/json" ^
  -d "@slack_payload.json" ^
  %WEBHOOK_URL%

del slack_payload.json

endlocal

Slack Webhook の設定手順

  • Slack App の設定ページ(api.slack.com/apps)にアクセス
  • 「Create New App」→「From scratch」を選択
  • 「Incoming Webhooks」を有効化
  • 「Add New Webhook to Workspace」で対象チャンネルを選択
  • 生成されたWebhook URLをバッチファイルに設定

ログ設計とセキュリティのベストプラクティス

API呼び出しバッチを本番運用する際には、ログ設計とセキュリティ対策が欠かせません。

ログ設計テンプレート

api_with_logging.bat
@echo off
setlocal enabledelayedexpansion

REM ログファイルの設定(日付でローテーション)
for /f "delims=" %%d in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd"') do set DATE=%%d
set LOG_FILE=logsapi_log_%DATE%.txt

REM ログディレクトリ作成
if not exist logs mkdir logs

REM ログ出力関数(擬似)
for /f "delims=" %%t in ('powershell -NoProfile -Command "Get-Date -Format HH:mm:ss"') do set TIME_NOW=%%t
echo [%DATE% %TIME_NOW%] [INFO] API呼び出し開始 >> %LOG_FILE%

set API_URL=https://api.example.com/data

curl -s -f --max-time 30 ^
  -o response.json ^
  -w "HTTP_CODE:%%{http_code} TIME:%%{time_total}" ^
  %API_URL% >> %LOG_FILE%

if errorlevel 1 (
  echo [%DATE% %TIME_NOW%] [ERROR] API呼び出し失敗 >> %LOG_FILE%
  exit /b 1
)

echo [%DATE% %TIME_NOW%] [INFO] 処理完了 >> %LOG_FILE%

endlocal

セキュリティのベストプラクティス

セキュリティ チェックリスト

  • APIキーのハードコード禁止 → 環境変数ファイル(.env)または Windows 資格情報マネージャーを使用
  • ログにシークレットを出力しない → curlの -v オプションを本番で使わない
  • HTTPS必須 → HTTP(平文)でのAPIコールは機密情報漏洩リスクあり
  • --insecure は開発環境のみ → 本番では証明書を正しく設定
  • 一時ファイルを必ず削除 → response.jsonなどにトークンが含まれる場合
  • ログファイルのアクセス権限設定 → 機密情報が含まれる場合は適切に管理

環境変数ファイルからAPIキーを読み込む

.env ファイル(Git管理外に置くこと)
API_KEY=your_secret_api_key
WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz
load_env.bat(.envファイルを読み込む)
@echo off
setlocal

REM .env ファイルから環境変数を読み込む
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
  if not "%%a"=="" set %%a=%%b
)

REM 読み込んだAPIキーを使用
curl -s -H "Authorization: Bearer %API_KEY%" https://api.example.com/data

endlocal

まとめ

バッチファイルから curl.exewget を使ってAPIを呼び出す方法について、基本から実践テンプレートまで解説しました。

この記事のまとめ

  • curl.exe は Windows 10 1803以降に標準搭載。GET/POST/認証ヘッダーに完全対応
  • レスポンスの保存-o ファイル名、ステータスコード取得は -w "%{http_code}"
  • JSON解析 は PowerShell の ConvertFrom-Json と組み合わせるのが最も実用的
  • エラーハンドリングerrorlevel + HTTPステータスコードの二段構えで確実に
  • リトライ処理setlocal enabledelayedexpansion + 指数バックオフで実装
  • セキュリティ は APIキーをハードコードせず、.envファイルや環境変数で管理
  • 本番運用 では必ずログ設計とエラー通知(Slack等)を組み込む

基本パターンを習得したら、タスクスケジューラと組み合わせて定期実行バッチとして使うと、自動化の幅が大きく広がります。ぜひ自身の業務自動化に活用してみてください。