意外とハマったcurlコマンドを使ってファイルダウンロードして別名保存する方法

2019年7月3日

テクノロジー

インターネットを使ってファイルダウンロードをするなんて、wgetコマンドで十分やろ!!! と考えていたんですが、curlのオプションの豊富さに、少し浮気をして使ってみようと考えたのが少しばかりハマリングポイントでした・・・ とは言っても、今どきwgetよりもcurl使っているエンジニアの方が多いっぽいから、そっちのほうがトレンド感があって、使い慣れておく必要もあると考えていたのも事実。 ようするに知らないことは知っておけという精神でやっています。

redirect問題に気をつける

今回ダウンロードするサイトでは、受付処理でセキュリティを重視されていたため、リダイレクト処理が内部で行われているようでした。 なので普通に"curl URL"と叩くと、以下のようなメッセージが返ります。 $ curl https://example.com/sample.dat <html><body>You are being <a href="https://example.com/sample.dat">redirected</a>.</body></html> なんか、気持ちの悪いダウンロードサービスだな〜と思いつつ、wgetで同じようにしてみる。 $ wget https://example.com/sample.dat example.com:443 への接続を再利用します。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 648488 (633K) [application/dat `sample.dat' に保存中 sample.dat 100%[=============================================================================================>] 633.29K 425KB/s in 1.5s 2019-07-03 08:00:00 (425 KB/s) - `sample.dat' へ保存完了 [648488/648488] なんと無事にダウンロード成功・・・ なんかcurl使えね〜〜〜。とか思ったりして・・・ これは、curlオプションで、「リダイレクト処理を無視する」というのを使用すると問題解決できた。 $ curl -L https://example.com/sample.dat > sample.dat % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 836 0 836 0 0 6748 0 --:--:-- --:--:-- --:--:-- 6741 100 633k 100 633k 0 0 92061 0 0:00:07 0:00:07 --:--:-- 105k "> sample.dat"をコマンドの最後につけているのは、curlでURLを叩くとそのまま標準出力されてしまって、バイナリデータを眺める羽目になってしまうので、出力ファイルを添えてあげましょう。

別名で出力する方法

コマンドをつないで別ファイル名でもいいのですが、curlコマンド単体で、URLのファイル名とは別ファイルで保存することができます。 $ curl -L https://example.com/sample.dat -o sample.dat % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 836 0 836 0 0 6748 0 --:--:-- --:--:-- --:--:-- 6741 100 633k 100 633k 0 0 92061 0 0:00:07 0:00:07 --:--:-- 105k   何のことはなく、"-o"オプションでファイル名を指定してあげるだけでいいんですね。 お好みでお使いください。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。