Windows 10のcurlコマンドでhttpリクエスト

Windows 10 Windows
この記事は約7分で読めます。

※当ブログではアフィリエイト広告を利用しています。

curlコマンドは「cURL」とも表記されて「カール」と読むが、Linuxに含まれるhttpプロトコルなどを利用するためのコマンドです。

Windows 10では、バージョン1803(Windows 10 April 2018 Update)で、このcurlコマンドが標準コマンドとして追加されて使えるようです。
Linuxのcurlコマンドとは対応するプロトコルに差異があったりするので、Windows版curlコマンドという感じかな。

そこで、Windows版curlコマンドを使用してhttpリクエストを行ってみました。

なお、今回のバージョンは以下の通りです。

  • Windows 10 Pro(64bit) 1803

curlコマンドの対応するプロトコル

Windows版curlコマンドの対応するプロトコルは、バージョン情報を表示する「-V」オプションを付けて実行すれば表示されます。

> curl -V

curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

httpの他にftp・imap・pop3・smtpなども対応しているようです。
ただし、Linuxのcurlコマンドはsmb・ldapなども含まれるので、Windows版は完全に同じわけではないみたい。

curlコマンドのオプション

curlコマンドのオプションは、「–help」オプションを付けて実行すれば分かるが、かなり数が多いです。

> curl --help

Usage: curl [options...]
--abstract-unix-socket Connect via abstract Unix domain socket
--anyauth Pick any authentication method
…

httpリクエストを行う際に使用するオプションをいくつか挙げます。

オプション概要
-I, –headヘッダ情報のみ出力
-s, –silentサイレントモード
-v, –verboseヘッダ情報やハンドシェイクを出力
-o, –outputファイルへ出力
-O, –remote-nameファイルをダウンロード
-0, –http1.0
–http1.1
–http2
HTTPのバージョンを指定
HTTP 1.0/1.1/2
-2, –sslv2
-3, –sslv3
SSLのバージョンを指定
SSL 2.0/3.0
-1, –tlsv1
–tlsv1.0
–tlsv1.1
–tlsv1.2
–tlsv1.3
TLSのバージョンを指定
TLS 1.0/1.1/1.2/1.3

curlコマンドの使用例

URLのみ指定でレスポンスボディを出力

curlコマンドは、通信相手をURLで指定して使用します。

httpリクエストする場合は、もちろんURLは「https://itlogs.net/」のようになります。
最もシンプルにURLのみ指定して実行すると、このようにレスポンスのボディ部分が出力されます。

> curl https://itlogs.net/

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="ie6" lang="ja"> <![endif]-->
<!--[if IE 7]> <html class="i7" lang="ja"> <![endif]-->
<!--[if IE 8]> <html class="ie" lang="ja"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="ja"> <!--<![endif]-->
<head prefix="og: https://ogp.me/ns# fb: https://ogp.me/ns/fb# article: https://ogp.me/ns/article#">
…

ちなみに、コマンドプロンプトのデフォルトの文字コードが「Shift_JIS」なので文字化けしてしまう場合は、「chcp 65001」とコマンドを入力して「UTF-8」に変更すればよいです。

詳細はこちらのページ参照。

疎通確認でレスポンスヘッダのみ出力

疎通確認でヘッダ情報のみ見たい場合は、「-I」オプションでできます。

> curl -I https://itlogs.net/

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 24 Dec 2018 02:58:19 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 46061
Connection: keep-alive
Vary: Accept-Encoding
Link: <https://itlogs.net/wp-json/>; rel="https://api.w.org/"
X-Mod-Pagespeed: Powered By mod_pagespeed
Vary: Accept-Encoding
Accept-Ranges: bytes

ファイルダウンロード

HTMLファイルとしてダウンロードする場合は「-o」オプション、画像やドキュメントファイルをダウンロードする場合は「-O」オプションを使用すればよいです。
また、ダウンロード状況の出力が不要であれば、「-s」オプションでサイレントモードで実行します。

> curl -s https://itlogs.net/ -o index.html

> curl -s -O https://itlogs.net/wp-content/uploads/eyecatch-Windows.jpg

通信時のHTTP・SSL・TLSバージョンを指定

サイトの通信できるHTTPのバージョンや許可されているSSL/TLSのバージョンを確認したいときは、「–httpX」「–sslvX」「–tlsvX」オプションを使用して指定したバージョンでリクエストを投げられます。
SSLやTLS1.0、1.1は古くてセキュリティ上のリスクもあるので、それらが正しく閉じられて通信できないようになっているかという確認にもなります。

> curl -I --http2 https://itlogs.net/

curl: (1) Unsupported protocol


> curl -I --sslv3 https://itlogs.net/

curl: (35) schannel: next InitializeSecurityContext failed: SEC_E_UNSUPPORTED_FUNCTION (0x80090302) - 要求された関数はサポートされていません


> curl -I --tlsv1.2 https://itlogs.net/

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 24 Dec 2018 03:18:12 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 46005
Connection: keep-alive
Vary: Accept-Encoding
Link: <https://itlogs.net/wp-json/>; rel="https://api.w.org/"
X-Mod-Pagespeed: Powered By mod_pagespeed
Vary: Accept-Encoding
Accept-Ranges: bytes

当サイトはエックスサーバーを使用しており、HTTP2に対応しているはずだが、コマンドはエラーになっていました。
どうもWindows版curlコマンドでは対応していないようです。

また、エックスサーバーでは2018年12月現在TLS1.2のみ許可されており、それより古いTLS1.1やSSL3.0等では通信できずにエラーが出るので、正しく閉じられているようです。

最後に

今回は、Windows 10のcurlコマンドについて紹介しました。
curlコマンドは、Webサイトの疎通確認などに使える便利なコマンドです。

Windows
\よかったらシェアしてね!/
えふめん

大阪在住、30代。
業務系SE・社内SE。

PCトラブルの調査、自作デスクトップPCのこと、PC周辺機器のレビューなどの記事を書いています。

えふめんをフォローする
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。

コメント

  1. […] Windows 10のcurlコマンドでhttpリクエスト […]

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