Windows 10 は、標準でcurlコマンドが使えるようになってたんですね。(知らなかったです)
Windows標準のcurl
について、少しだけ確認してみました。
Wndows PowerShell 5.1
デフォルトでインストールされている Wndows PowerShell 5.1 環境で curl
と実行してみたら以下のようになりました
PS C:\Users> curl コマンド パイプライン位置 1 のコマンドレット Invoke-WebRequest 次のパラメーターに値を指定してください: Uri:
何か思ってたのと違うので、よくよく確認してみたら
curl
というコマンドは Invoke-WebRequest
の Alias になってました。(以下の通り)
PS C:\Users> Get-Command curl CommandType Name Version Source ----------- ---- ------- ------ Alias curl -> Invoke-WebRequest PS C:\Users> Get-Command Invoke-WebRequest CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Invoke-WebRequest 3.1.0.0 Microsoft.PowerShell.Utility
ただし、実際には上記の curl とは関係なく、 curl.exe
というものが標準でインストールされています。
curl.exe
とやれば実行できます。(こっちのほうが想定してた curl
コマンドに近いと思われます)
PS C:\Users> curl.exe curl: try 'curl --help' for more information PS C:\Users> Get-Command curl.exe CommandType Name Version Source ----------- ---- ------- ------ Application curl.exe 7.55.1.0 C:\WINDOWS\system32\curl.exe
PowerShell 7.1
標準の Windows PowerShell とは別で PowerShell 7.1 もインストールしているので、
そちらでも curl
コマンドを確認してみました。今回確認した環境の情報(バージョン等)は以下の通りです。
PS C:\Users> $PSVersionTable Name Value ---- ----- PSVersion 7.1.3 PSEdition Core GitCommitId 7.1.3 OS Microsoft Windows 10.0.19042 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0
curl
について確認した結果は以下の通りです。
PS C:\Users> curl curl: try 'curl --help' for more information PS C:\Users> Get-Command curl CommandType Name Version Source ----------- ---- ------- ------ Application curl.exe 7.55.1.0 C:\WINDOWS\system32\curl.exe
こっちは最初から curl
が curl.exe
を指してます。(もしかしたら環境にもよるかもしれませんが)
ついでに curl --version
も実行してみました。
PS C:\Users> curl --version curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL Release-Date: 2017-11-14, security patched: 2019-11-05 Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
話は、それますが DOSプロンプトでも curl
は curl.exe
(C:\WINDOWS\system32\curl.exe
) を指しています。
WSL
WSL (Ubuntu 20.04.2 LTS) での curl もついでに確認。
user01@PC-001:/mnt/c/Users$ curl curl: try 'curl --help' or 'curl --manual' for more information user01@PC-001:/mnt/c/Users$ which curl /usr/bin/curl user01@PC-001:/mnt/c/Users$ curl --version curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3 Release-Date: 2020-01-08 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets
Windows版標準のcurl.exe
とは バージョン、扱えるプロトコル、機能 に差異があるようです。
まとめ・補足
curl
と安易に実行しても、実行環境によってcurl.exe
だったり、そうでなかったりしています。curl.exe
は Windows用にビルドされたcurl
のためか、Linux上のcurl
とは扱えるプロトコルやパラメータに差異があります。- (実行例が無いので分かりにくいですが)
curl.exe
でも、Linux用にビルドされているcurl
とほぼ同じ操作ができます。
HTTPステータスコードだけ取得
以前書いたこのエントリをWindows標準のcurl.exe
で実現する場合は以下のようになります。
curl -s {リクエスト先のURL} -o nul -w '%{http_code}\n'
上記は PowerShell 7.1 で実行する想定です。