インターネットを使ってファイルダウンロードをするなんて、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"オプションでファイル名を指定してあげるだけでいいんですね。
お好みでお使いください。
0 件のコメント:
コメントを投稿