#昨日
昨日、curl、wgetそしてInvoke-WebRequestについてというタイトルで記事を書きました。
https://qiita.com/tatsuki1112/items/dec473f93ca1bda239fb
そこで、windows内でcurlはInvoke-WebRequestのaliasの一つであり、本来のcurlとはだいぶ異なるものであると書きました。
しかし、よく調べるとWindows10にはcurlそのものが実装されているというのです!!!!
#やってみた
PowerShellにおいては、curlはInvoke-WebRequestのaliasの一つであり、単にcurlコマンドをPowerShell上でたたいても、Invoke-WebRequestが実行されるのみです。ではPowerShellでcurlを実行するにはどうしたらよいのでしょうか、方法は以下の通りです。
今日取得するのは最高裁判所から、マクリーン事件の判例pdfです。
>cmd
Microsoft Windows [Version 10.0.18362.418]
(c) 2019 Microsoft Corporation. All rights reserved.
>curl http://www.courts.go.jp/app/files/hanrei_jp/255/053255_hanrei.pdf
☝こちらはコマンドプロンプトをPowershell上で実行する方法
>cmd /c curl http://www.courts.go.jp/app/files/hanrei_jp/255/053255_hanrei.pdf -O
☝こちらはコマンドで実行し、PowerShellに戻るというオプションです、/kにすると、PowerShellに戻りません。
>curl.exe http://www.courts.go.jp/app/files/hanrei_jp/255/053255_hanrei.pdf -O
☝こちらはC:\Windows\System32にある、curl.exeを直接呼び出しています。
どれも無事にpdfファイルをダウンロードできました、オプションもcurlと同様のものが利用できるようです。
>curl.exe http://www.courts.go.jp/app/files/hanrei_jp/255/053255_hanrei.pdf -o $env:USERPROFILE\Downloads\maclean_hanrei.pdf
curl(本物)使えるじゃん!!!!
#まとめ
windowsでcurlコマンドが使えることがわかりました。調べてみるとver1803から標準で使えるようになったようです。しかし、先にPowerShellのInvoke-WebRequestにaliasとしてcurlが割り当てられてしまったがために、なんとなく使いにくい現状になってしまっています。また、curlはオプションを指定しない場合htmlが返ってくるのですが、chcp 65001
で文字エンコードをUTF-8にしたとしても文字化けしてまともに使えたものではありません。この辺もまだまだ発展途上な感じがありますね。
##追記
この記事は基本的にはWindows10に標準搭載されているPowerShellを基準に記述しています。しかし、最新版かつクロスプラットフォーム化したPowerShell coreではInvoke-WebRequestのaliasとしてのcurlやwgetは廃止されているようです。