「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"
}
定期実行の設定
タスクスケジューラで自動実行:
- タスクスケジューラを開く
- 「基本タスクの作成」
- トリガー:毎日/毎時など
- 操作:プログラムの開始
- プログラム:
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! 🚀
コメント