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

Windows Windows

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」に変更すればよいです。
詳細はこちらのページ参照。

Windowsコマンドプロンプトの文字コード変更
Windowsコマンドプロンプトの文字コードを変更する方法を紹介します。

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

疎通確認でヘッダ情報のみ見たい場合は、「-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のバージョンを確認したいときは、「–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等では通信できずにエラーが出るので、正しく閉じられているようです。

以上です。

コメント

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