Windows curlコマンド完全ガイド!HTTPリクエストからAPIテストまで活用法を徹底解説

Windows

「APIのテストをコマンドラインでやりたい」 「ファイルを自動でダウンロードしたい」 「HTTPリクエストの詳細を確認したい」

こんな時に大活躍するのがcurl(カール)コマンドです。

以前はLinux/Mac専用のツールだと思われていたcurlですが、実はWindows 10以降では標準搭載されているんです!追加インストール不要で、すぐに使えます。

curlを使えば、ブラウザを開かずにWebサイトにアクセスしたり、APIをテストしたり、ファイルをダウンロードしたりできます。プログラマーやWeb開発者にとっては必須ツールですが、一般ユーザーにも便利な使い方がたくさんあります。

この記事では、Windowsでのcurlの使い方を、基本から応用まで分かりやすく解説します!


スポンサーリンク

基礎知識:curlって何?Windowsでの利用状況

curlとは

curl(Client URL)の特徴:

  • コマンドラインでHTTP/HTTPS通信を行うツール
  • GET、POST、PUT、DELETEなど各種HTTPメソッドに対応
  • ファイルのダウンロード/アップロード可能
  • 認証、プロキシ、SSL証明書の処理も可能
  • JSONやXMLデータの送受信に便利

主な用途:

・APIのテスト・デバッグ
・Webサイトの応答確認
・ファイルの自動ダウンロード
・HTTPヘッダーの確認
・Webスクレイピングの準備
・CI/CDパイプラインでの利用

Windowsバージョン別の対応状況

curlの利用可能状況:

【Windows 10(1803以降)】
・標準搭載
・PowerShellとコマンドプロンプト両方で利用可能
・バージョン7.55.1以降

【Windows 11】
・標準搭載
・最新版のcurlを搭載
・全機能利用可能

【Windows 10(1803より前)】
・手動インストールが必要
・curl.exeをダウンロード

【Windows 7/8】
・手動インストール必須
・Git Bashなどに含まれる場合も

curlのバージョン確認

確認方法:

curl --version

出力例:

curl 7.83.1 (Windows) libcurl/7.83.1 Schannel
Release-Date: 2022-05-13
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

基本的な使い方:最初のcurlコマンド

シンプルなGETリクエスト

まずは最も基本的な使い方から始めましょう。

Webページの取得:

curl https://example.com

HTMLソースが表示されます。

ファイルに保存:

curl https://example.com -o example.html

より実用的な例:

# 自分のIPアドレスを確認
curl https://ipinfo.io/ip

# 天気情報を取得
curl wttr.in/Tokyo

# JSONデータを取得
curl https://api.github.com/users/github

POSTリクエストの送信

データを送信する場合の基本形です。

シンプルなPOST:

curl -X POST https://httpbin.org/post -d "name=John&age=30"

JSONデータの送信:

curl -X POST https://httpbin.org/post ^
  -H "Content-Type: application/json" ^
  -d "{\"name\":\"John\",\"age\":30}"

注意: Windowsでは改行に^を使用(PowerShellでは`

ファイルのダウンロード

元のファイル名で保存:

curl -O https://example.com/file.pdf

名前を指定して保存:

curl -o myfile.pdf https://example.com/file.pdf

進捗表示付きダウンロード:

curl -# -O https://example.com/largefile.zip

PowerShellでの注意点:落とし穴を回避

PowerShellのcurlエイリアス問題

PowerShellには要注意な罠があります!

問題:

# PowerShellでcurlと入力すると...
curl https://example.com
# 実はInvoke-WebRequestが実行される!

解決方法:

# 方法1:curl.exeと明示的に指定
curl.exe https://example.com

# 方法2:エイリアスを削除
Remove-Item Alias:curl

# 方法3:コマンドプロンプトを使う
cmd /c curl https://example.com

PowerShell特有のエスケープ

JSONデータの送信(PowerShell):

# バッククォートでエスケープ
curl.exe -X POST https://httpbin.org/post `
  -H "Content-Type: application/json" `
  -d '{\"name\":\"John\",\"age\":30}'

# または一重引用符を使用
curl.exe -X POST https://httpbin.org/post `
  -H 'Content-Type: application/json' `
  -d '{"name":"John","age":30}'

よく使うオプション一覧:これだけ覚えれば十分

必須オプション

# ヘッダー関連
-H "Header: Value"     # ヘッダーを追加
-I                     # ヘッダーのみ取得(HEAD)
-i                     # レスポンスヘッダーも表示

# データ送信
-d "data"              # POSTデータ送信
-X METHOD              # HTTPメソッド指定
-F "file=@path"        # ファイルアップロード

# 出力制御
-o filename            # ファイルに保存
-O                     # 元のファイル名で保存
-s                     # サイレントモード
-v                     # 詳細表示(デバッグ)

# 認証
-u user:password       # Basic認証
-H "Authorization: Bearer TOKEN"  # Bearer認証

# その他
-L                     # リダイレクトをフォロー
-k                     # SSL証明書の検証をスキップ
--proxy http://proxy:port  # プロキシ経由

実用的な組み合わせ例

APIテストの定番:

# JSONをPOSTして結果を見る
curl -X POST https://api.example.com/users ^
  -H "Content-Type: application/json" ^
  -H "Authorization: Bearer YOUR_TOKEN" ^
  -d "{\"name\":\"Test User\"}" ^
  -v

ダウンロード&プログレスバー:

curl -L -# -o output.zip https://example.com/file.zip

実践例:現場で使える具体的な活用法

REST APIのテスト

CRUD操作の完全例:

# CREATE(POST)
curl -X POST https://jsonplaceholder.typicode.com/posts ^
  -H "Content-Type: application/json" ^
  -d "{\"title\":\"Test\",\"body\":\"Test content\",\"userId\":1}"

# READ(GET)
curl https://jsonplaceholder.typicode.com/posts/1

# UPDATE(PUT)
curl -X PUT https://jsonplaceholder.typicode.com/posts/1 ^
  -H "Content-Type: application/json" ^
  -d "{\"id\":1,\"title\":\"Updated\",\"body\":\"Updated content\",\"userId\":1}"

# DELETE
curl -X DELETE https://jsonplaceholder.typicode.com/posts/1

ファイルアップロード

マルチパートフォームデータ:

# 画像をアップロード
curl -X POST https://httpbin.org/post ^
  -F "file=@C:\Users\user\picture.jpg" ^
  -F "description=My Picture"

# 複数ファイル
curl -X POST https://httpbin.org/post ^
  -F "file1=@file1.txt" ^
  -F "file2=@file2.txt"

Webサイトの監視

レスポンスタイムの測定:

curl -o nul -s -w "Status: %%{http_code}\nTime: %%{time_total}s\n" https://example.com

定期監視バッチ:

@echo off
:loop
echo %date% %time%
curl -o nul -s -w "%%{http_code} - %%{time_total}s" https://example.com
echo.
timeout /t 60 /nobreak >nul
goto loop

認証が必要なAPIアクセス

各種認証方法:

# Basic認証
curl -u username:password https://api.example.com/secure

# Bearer Token(JWT等)
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." https://api.example.com/secure

# APIキー(ヘッダー)
curl -H "X-API-Key: your-api-key" https://api.example.com/data

# APIキー(クエリパラメータ)
curl "https://api.example.com/data?api_key=your-api-key"

高度な使い方:プロフェッショナルテクニック

cookieの処理

cookieの保存と送信:

# cookieを保存
curl -c cookies.txt -u user:pass https://example.com/login

# 保存したcookieを使用
curl -b cookies.txt https://example.com/secure-page

# cookieを保存して次のリクエストで使用
curl -c cookies.txt -b cookies.txt https://example.com/api

並列ダウンロード

複数ファイルを同時ダウンロード:

# URLリストファイルから一括ダウンロード
curl -Z -K urls.txt

# urls.txtの内容
url = "https://example.com/file1.zip"
output = "file1.zip"
url = "https://example.com/file2.zip"  
output = "file2.zip"

レスポンスの整形

JSONを見やすく表示(jqと組み合わせ):

# jqがインストールされている場合
curl -s https://api.github.com/users/github | jq .

# PowerShellの場合
curl.exe -s https://api.github.com/users/github | ConvertFrom-Json | ConvertTo-Json

プロキシ経由のアクセス

企業ネットワークでの利用:

# HTTPプロキシ
curl --proxy http://proxy.company.com:8080 https://example.com

# 認証付きプロキシ
curl --proxy-user username:password --proxy http://proxy:8080 https://example.com

# SOCKSプロキシ
curl --socks5 localhost:1080 https://example.com

トラブルシューティング:よくある問題と解決法

SSL証明書エラー

問題:

curl: (60) SSL certificate problem: unable to get local issuer certificate

解決方法:

# 方法1:証明書検証をスキップ(開発環境のみ)
curl -k https://self-signed.example.com

# 方法2:CA証明書を指定
curl --cacert C:\path\to\ca-cert.pem https://example.com

# 方法3:環境変数で設定
set CURL_CA_BUNDLE=C:\path\to\ca-cert.pem
curl https://example.com

文字化け問題

日本語が文字化けする場合:

# UTF-8を指定
curl -H "Accept-Charset: utf-8" https://example.com

# chcpでコードページを変更
chcp 65001
curl https://example.com

タイムアウト設定

レスポンスが遅い場合:

# 接続タイムアウト10秒、全体30秒
curl --connect-timeout 10 --max-time 30 https://slow-server.com

# リトライ設定
curl --retry 3 --retry-delay 5 https://unstable-server.com

プロキシ関連のエラー

プロキシが原因の場合:

# プロキシを無視
curl --noproxy "*" https://internal-server.com

# 環境変数をクリア
set http_proxy=
set https_proxy=
curl https://example.com

自動化とスクリプト化

バッチファイルでの活用

API監視スクリプト:

@echo off
setlocal enabledelayedexpansion

set URL=https://api.example.com/health
set LOG=api_monitor.log

:monitor
for /f "tokens=*" %%i in ('curl -s -o nul -w "%%{http_code}" %URL%') do set STATUS=%%i
echo %date% %time% - Status: !STATUS! >> %LOG%

if !STATUS! neq 200 (
    echo Alert: API is down! Status: !STATUS!
    # ここにアラート処理を追加
)

timeout /t 300 /nobreak >nul
goto monitor

PowerShellスクリプトでの活用

複数APIエンドポイントのテスト:

$endpoints = @(
    @{url="https://api.example.com/users"; method="GET"},
    @{url="https://api.example.com/posts"; method="GET"},
    @{url="https://api.example.com/login"; method="POST"; data='{"user":"test"}'}
)

foreach ($endpoint in $endpoints) {
    Write-Host "Testing: $($endpoint.url)"
    
    $args = @("-X", $endpoint.method, $endpoint.url)
    if ($endpoint.data) {
        $args += @("-d", $endpoint.data)
        $args += @("-H", "Content-Type: application/json")
    }
    
    $response = curl.exe @args -s -o nul -w "%{http_code}"
    Write-Host "Status: $response`n"
}

定期実行の設定

タスクスケジューラで自動実行:

  1. タスクスケジューラを開く
  2. 「基本タスクの作成」
  3. トリガー:毎日/毎時など
  4. 操作:プログラムの開始
  5. プログラム:C:\path\to\your\curl_script.bat

便利なツールとの連携

JSONの処理(jq)

jqのインストールと使用:

# Chocolateyでインストール
choco install jq

# 使用例
curl -s https://api.github.com/repos/microsoft/vscode | jq ".stargazers_count"

Git Bashとの併用

Git Bashの利点:

  • Linuxライクな環境
  • パイプやリダイレクトが使いやすい
  • sedやawkと組み合わせ可能
# Git Bashでの例
curl -s https://example.com | grep "<title>" | sed 's/<[^>]*>//g'

セキュリティ上の注意点

認証情報の取り扱い

やってはいけないこと:

# ❌ パスワードを直接コマンドに記述
curl -u admin:password123 https://api.example.com

# ⭕ 環境変数を使用
set API_TOKEN=your-secret-token
curl -H "Authorization: Bearer %API_TOKEN%" https://api.example.com

# ⭕ ファイルから読み込み
curl -H @headers.txt https://api.example.com

HTTPSの重要性

常にHTTPSを使用:

  • HTTPは通信が暗号化されない
  • 特に認証情報を送る場合は必須
  • 開発環境でも可能な限りHTTPS

まとめ:curlマスターへの道

ここまで読んでいただき、ありがとうございます!

WindowsでもLinux同様にcurlが使えることで、コマンドラインでのWeb操作が格段に便利になります。

今すぐ試すべき基本コマンド:

# 自分のIPアドレス確認
curl https://ipinfo.io/ip

# APIテスト
curl https://jsonplaceholder.typicode.com/posts/1

# ファイルダウンロード
curl -O https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf

覚えておくべき重要オプション:

  • -X : HTTPメソッド指定
  • -H : ヘッダー追加
  • -d : データ送信
  • -o : 出力先指定
  • -v : 詳細表示

PowerShellでの注意: 必ずcurl.exeと指定することを忘れずに!

最後のアドバイス:

curlは非常に強力なツールですが、最初は基本的なGETリクエストから始めて、徐々に複雑な操作を覚えていくのがおすすめです。

APIの開発やテスト、自動化スクリプトの作成など、様々な場面で活躍します。この記事をブックマークして、必要な時に参照してください。

Happy curling! 🚀

コメント

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