ヽ(´・肉・`)ノログ

How do we fighting without fighting?

curl でリダイレクト先のデータを取得する

いつも忘れる

$ curl -O https://github.com/emberjs/starter-kit/archive/v1.0.0-rc.3.zip
$ cat v1.0.0-rc.3.zip
<html><body>You are being <a href="https://codeload.github.com/emberjs/starter-kit/zip/v1.0.0-rc.3">redirected</a>.</body></html>

となり,レスポンスがリダイレクトだった場合,リダイレクト先の情報を取得してくれない.

$ curl -OL https://github.com/emberjs/starter-kit/archive/v1.0.0-rc.3.zip

と L をオプションに付けると,レスポンスがリダイレクトだった場合,リダイレクト先の情報を取得してくれる.

$ man curl | grep -A 8 '^ *\-L'
       -L, --location
              (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request
              on  the  new  place.  If  used together with -i, --include or -I, --head, headers from all requested pages will be shown. When authentication is used, curl only sends its credentials to the initial
              host. If a redirect takes curl to a different host, it won't be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to fol‐
              low by using the --max-redirs option.

              When  curl  follows  a  redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response
              code was any other 3xx code, curl will re-send the following request using the same unmodified method.

ステータスが 3xx だった場合にリクエストを送りなおしてくれるみたいですね.