🦏 Windows環境で「curl」コマンドを実行すると思わぬ動作をした話
作成日: 2021/12/09
4

Windowsでは『curl』はエイリアス(別名)として登録されている!


React入門の「4-6 Github APIをたたく」では、以下のコマンドを実行します。

curl -I https://api.github.com/users/octocast/orgs

しかし、上記コマンドをWindows環境で実行すると、以下のようにUriの指定が求められ、
望んでいる結果が返ってきません!

curl -I https://api.github.com/users/octocat/orgs

コマンド パイプライン位置 1 のコマンドレット Invoke-WebRequest
次のパラメーターに値を指定してください:
Uri:

本事象の発生する原因は、WindowsではcurlコマンドがInvoke-WebRequestのエイリアスであるためです。
すなわち、curlコマンドを指定すると実際に実行されるのは、Invoke-WebRequestコマンドであり、両者で指定できるパラメータが異なるためであると考えられます!

なお、両コマンドの定義は以下の通り、サーバーからのデータ取得です。
curl:a tool for transferring data from or to a server
Invoke-WebRequest:Gets content from a web page on the internet.

Windows環境で正しく実行するには?


以下の方法があげられます。

  1. エイリアスの削除
  2. コマンドcurl.exeにて実行する。
    今回は、2の方法を実施したところ、理想の結果が得られました。
curl.exe -I https://api.github.com/users/octocat/orgs

HTTP/1.1 200 OK
Server: GitHub.com
Date: Thu, 09 Dec 2021 16:36:30 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 5
Cache-Control: public, max-age=60, s-maxage=60
Vary: Accept, Accept-Encoding, Accept, X-Requested-With
ETag: "992aaf92b487506974e4305db4a64326866f3ed48b2ba424cef8fbe4e28f72b0"
X-GitHub-Media-Type: github.v3; format=json
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
X-Frame-Options: deny
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Content-Security-Policy: default-src 'none'
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 56
X-RateLimit-Reset: 1639068964
X-RateLimit-Resource: core
X-RateLimit-Used: 4
Accept-Ranges: bytes
X-GitHub-Request-Id: F1BA:7A98:2598B:2B4DA:61B2308E

参考情報
PowerShell コンソール内で curl や wget が実行できないとお嘆きのあなたへ
Invoke-WebRequest
curl.1 the man page


マークアップエンジニア フロントエンドエンジニアを目指して孤軍奮闘中! 人生を楽しむことを忘れずに、ゆるりと頑張っていきたいですね!