curlコマンドは、URLを指定してWebサーバーなどと通信し、返ってきた中身を表示するコマンドです。-Iで応答のヘッダーだけ、-vで通信の途中経過、-wで所要時間を出せます。Windows 10・11にも最初から入っています。
この記事でわかること
- curlコマンドの基本の書き方と、よく使うオプションの一覧
- -vの出力で、どこまで通信が進んだかを読む方法
- -wでDNS・接続・TLS・サーバー処理の時間を分けて測る方法
- –resolveでDNSを変えずに特定のサーバーを試す方法
- 終了コード(6・7・28・35・60)別の原因の見当のつけ方
一次情報: curl「curl man page」(参照)/curl「curl shipped by Microsoft」(参照)/Microsoft Learn「curl on Windows」(参照)/RFC 9110「HTTP Semantics」(参照)※2026年10月時点
curlでWebやAPIの応答を確かめるのは、ネットワークとサーバーの境目にある仕事です。2つの職種で業務と年収がどう違うかは、別の記事で整理しています。
curlコマンドとは?URLを指定して通信するコマンド
curlコマンドとは、URLを指定して相手と通信し、返ってきた中身をそのまま画面に出すコマンドです。HTTPやHTTPSのほか、FTPなど多くの通信方式に対応しています。
ブラウザと違い、画面を描かずに「何が返ってきたか」を文字で見せるのが特徴です。そのため、Webサーバーやロードバランサーの応答確認、APIの動作確認、障害時の切り分けでよく使われます。
Windowsにも最初から入っている
curlの公式サイトによると、Windows 10と11には、どのインストールにもcurlが標準で入っています。コマンドプロンプトで「curl –version」と打つと出る1行目が、入っているcurlの版です。
ただし、Windows PowerShell 5.1だけは注意してください。Microsoftの資料のとおり、5.1には「curl」という別名が定義されていて、中身はInvoke-WebRequestという別のコマンドです。PowerShellでは「curl.exe」と拡張子まで打つと、本物のcurlが動きます。PowerShell 7以降には、この別名はありません。
| 打つ場所 | そのまま「curl」で動くか | 注意点 |
|---|---|---|
| Linux・Mac | 動く | 入っていない最小構成のLinuxもある |
| Windowsのコマンドプロンプト | 動く | 出力先を捨てるときは「NUL」を使う |
| Windows PowerShell 5.1 | 別のコマンドが動く | 「curl.exe」と打つ |
| PowerShell 7以降 | 動く | 別名の問題はない |
curlコマンドの基本の書き方とよく使うオプション
基本は「curl オプション URL」です。オプションを付けなければ、相手が返した本文(HTMLなど)がそのまま画面に流れます。
curl https://www.example.com/
curl -I https://www.example.com/
curl -o page.html https://www.example.com/
| オプション | 意味 | 使う場面 |
|---|---|---|
| -I | 応答のヘッダーだけを取る | ステータスコードの確認 |
| -i | ヘッダーと本文の両方を出す | 中身もあわせて見たいとき |
| -v | 通信の途中経過を出す | どこで止まるかを見るとき |
| -o ファイル/-O | 結果をファイルに保存 | ダウンロード |
| -L | 転送先(301・302)を追いかける | リダイレクトのあるURL |
| -s | 進み具合の表示を消す | スクリプトや-wと組み合わせるとき |
| -m 秒/–connect-timeout 秒 | 全体/接続までの待ち時間の上限 | 応答が無いときに早く切る |
| -x プロキシ | 指定したプロキシを通す | 社内からインターネットへ出るとき |
| -k | 証明書の検証を飛ばす | 検証環境だけ。本番では使わない |
| -X・-H・-d | 方式・ヘッダー・送るデータを指定 | APIの確認 |
-Iでは、1行目にステータスコードが出ます。200なら正常、301や302は別のURLへの転送、403は拒否、503はサーバー側が受け付けられない状態です。これらの意味はRFC 9110で決められています。
-vの出力で、どこまで進んだかを読む
-vを付けると、行の先頭の記号で3種類の情報が分かれて出ます。この記号を覚えておくと、長い出力でも迷いません。
* Trying 192.0.2.10:443...
* Connected to www.example.com (192.0.2.10) port 443
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
> GET / HTTP/1.1
> Host: www.example.com
< HTTP/1.1 200 OK
< Content-Type: text/html
| 行頭 | 中身 | 読み方 |
|---|---|---|
| * | curl自身の進み具合 | Trying→Connected→TLSの順に進めば通信は確立している |
| > | こちらが送ったリクエスト | 送ったURL・Hostヘッダーが正しいか |
| < | 相手が返した応答 | 1行目がステータスコード |
「Trying」のまま止まれば、相手のポートまで届いていません。「Connected」の後のTLSの行で止まれば、証明書や暗号の交渉の段階です。「<」の行が出ていれば、ネットワークはつながっていて、問題はサーバーの応答の中身にあります。
WindowsのcurlはTLSの処理に「Schannel」を使うため、TLSの行の表示がLinuxと少し違います。読み方の順番は同じです。
-wで時間を分けて測る|どこが遅いかを数字で見る
「Webが遅い」と言われたとき、遅いのがDNSなのか、回線なのか、サーバーの処理なのかを分けるのに-wが役立ちます。-wは、通信が終わった後に指定した項目を表示するオプションです。
curl -o /dev/null -s -w "dns:%{time_namelookup} tcp:%{time_connect} tls:%{time_appconnect} first:%{time_starttransfer} total:%{time_total}\n" https://www.example.com/
Windowsのコマンドプロンプトでは「/dev/null」を「NUL」に替えます。表示される数字は、どれも「始めてから、その段階が終わるまで」の秒数です。
| 項目 | 終わった段階 | ここだけ大きいときに疑う場所 |
|---|---|---|
| time_namelookup | 名前解決 | DNSサーバー、DNSの設定 |
| time_connect | TCPの接続 | 回線の遅延、途中のファイアウォール |
| time_appconnect | TLSの交渉 | 証明書の確認、暗号の処理 |
| time_starttransfer | 最初の1バイトの受信 | サーバーやアプリの処理 |
| time_total | 全体 | 本文が大きい、帯域が足りない |
curlの資料にあるとおり、各項目は累計の値です。各段階にかかった時間は、1つ前の項目との差で読みます。
差を取ると、遅い段階が1つに絞れる
- -wの数字は開始からの累計。前の項目との差を見る
- 1time_namelookup名前解決にかかった秒数そのもの。大きければDNSを疑う
- 2time_connect − time_namelookupTCPの接続に使った分。往復の遅延がほぼそのまま出る
- 3time_appconnect − time_connectTLSの交渉にかかった時間。HTTPでは0のまま
- 4time_starttransfer − time_appconnectサーバーが最初の1バイトを返すまで。アプリの処理時間に近い
4だけが大きければネットワークではなくサーバー側。数字を添えて担当へ渡すと話が早い。
図:-wの累計値を引き算して、DNS・接続・TLS・サーバー処理のどこが遅いかを読む
DNSを変えずに特定のサーバーを試す(–resolve)
ロードバランサーの後ろに複数台のサーバーがあると、どのサーバーが応答したのか分からないことがあります。新しいサーバーをDNSに登録する前に、先に動作を確かめたい場面もあるでしょう。こうしたときに使うのが–resolveです。
curl -I --resolve www.example.com:443:192.0.2.21 https://www.example.com/
この書き方では、URLのホスト名はそのままに、接続先だけを192.0.2.21に差し替えます。curlの資料では「コマンドラインで書くhostsファイルの代わり」と説明されています。
hostsファイルを書き換えずに済むので、PC全体の通信に影響を出しません。URLの名前はそのままなので、HTTPSの証明書の確認もふだんどおり行われるのが利点です。
curlのエラーは終了コードで読む
curlは、失敗すると番号つきの終了コードを返します。番号がそのまま「どの段階で失敗したか」を表すので、メッセージを読み飛ばしても原因の見当がつきます。
| 番号 | curlの資料での意味 | 疑う場所 |
|---|---|---|
| 6 | Could not resolve host(名前が引けない) | DNS、ホスト名の綴り |
| 7 | Failed to connect to host(接続できない) | ポートが閉じている、ファイアウォール |
| 28 | Operation timeout(時間切れ) | 途中で通信が捨てられている、相手が遅い |
| 35 | SSL connect error(TLSの交渉に失敗) | 暗号方式の不一致、途中の機器の介入 |
| 60 | 証明書を信頼できるCAで確かめられない | 証明書の期限・発行元、社内の中継装置 |
終了コードを表示するコマンドは、Linuxなら「echo $?」、コマンドプロンプトなら「echo %ERRORLEVEL%」、PowerShellなら「$LASTEXITCODE」です。監視のスクリプトに組み込むときも、この番号で分岐させると扱いやすくなります。
社内のプロキシを通すとき
会社のネットワークでは、外へ出る通信がプロキシ経由に決められていることがよくあります。プロキシを指定しないと、7や28で失敗するのが典型です。
curl -x proxy.example.local:8080 -I https://www.example.com/
逆に、社内のサーバーへの確認なのにプロキシを通ってしまい失敗する例もあります。環境変数にプロキシが入っていないかも、あわせて確かめておくと迷いません。
よくある質問
PowerShellでcurlを打つと、オプションのエラーになります
Windows PowerShell 5.1では「curl」がInvoke-WebRequestの別名になっているためです。「curl.exe」と拡張子まで打てば、本物のcurlが動きます。PowerShell 7以降なら、この問題は起きません。
-kを付けると証明書のエラーが消えますが、使っていいですか?
-kは、相手が本物かどうかの確認を飛ばすオプションです。検証用の機器で、自分で作った証明書を使っている場面に限るのが基本になります。本番のサイトで60のエラーが出るなら、証明書の期限や中間証明書の抜けを先に調べてください。
curlでポートが開いているかを確かめられますか?
確かめられます。「curl -v telnet://相手:ポート番号」と打ち、「Connected to」の行が出れば、そのポートにTCPでつながった証拠です。Windowsでtelnetを入れられないときの代わりとして使えます。
curlとwgetは何が違いますか?
wgetはファイルを取ってくることに向いた道具で、まとめてのダウンロードが得意です。curlは送り方を細かく決められるので、ヘッダーの確認やAPIの動作確認、通信の切り分けに向いています。Windowsに標準で入っているのはcurlのほうです。
APIにJSONを送るにはどう書きますか?
「curl -X POST -H “Content-Type: application/json” -d “{\”name\”:\”test\”}” URL」のように、方式・ヘッダー・本文を指定します。コマンドプロンプトでは、本文の中の「”」を「\”」のように書く必要があります。長くなるときは、本文をファイルにして「-d @data.json」で読ませると崩れません。
まとめ
- curlコマンドは、URLを指定して通信し、返ってきた中身を文字で見せる
- Windows 10・11にも標準で入る。PowerShell 5.1では「curl.exe」と打つ
- -Iでステータス、-vで途中経過、-wで段階ごとの時間を見る
- –resolveなら、DNSやhostsを変えずに特定のサーバーを試せる
- 終了コード6はDNS、7は接続、28は時間切れ、35・60はTLSと証明書を疑う
curlで「どの段階が遅いか」を数字で示せると、サーバー担当やアプリ担当とのやり取りが一気に短くなります。名前解決が怪しいときはdigやnslookup、届かないときはpingやtracertへと、段階に合わせてコマンドを替えていくのが近道です。
障害の原因を数字で示して切り分けられる力は、年収の交渉でも評価につながります。経験年数や資格ごとに、ネットワークエンジニアの年収相場を整理した記事です。
免責事項
※本記事はcurlの公式資料・Microsoftの公式ドキュメント・RFCなどの公開情報をもとに整理したものです。コマンドの表示や挙動は、OSやcurlのバージョン・環境によって変わる場合があります。業務で使う環境では、所属先の手順と各製品の最新資料をあわせてご確認ください。

