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 10のcurlコマンドでhttpリクエスト […]