Mac OS 10.11.6 El Capitanを実行しています。プログラムでダウンロードしたいリンクがあります:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
このURLをブラウザ(Safariなど)に貼り付けると、ダウンロードは完全に機能します。
ただし、を使用してコマンドラインから同じURLをダウンロードしようcurl
としても機能しません。結果は空のファイルになります。
$ ls -lA
$ curl -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
$ ls -lA
total 0
-rw-r--r-- 1 myname staff 0 Nov 7 14:07 mysql-5.7.16-osx10.11-x86_64.dmg
$
もちろん、ブラウザからファイルを取得できますが、上記のコマンドが機能しない理由を理解したいと思いcurl
ます。
curl
このファイルがWebサイトに明らかに存在し、グラフィカルWebブラウザーを介して正しくアクセスおよびダウンロードできるのに、なぜこのファイルを正しくダウンロードできないのですか?
curl -v
、「verbose」に使用できます。接続、要求、応答に関するさまざまな情報を標準エラーに出力します。この場合、応答にはHTTP 302 Found
(リダイレクトコード)と、Location
移動先のURLを含むヘッダーが含まれていることがわかります。次に、man curl
リダイレクトに従うように指示する方法を見つけることができます。
User-Agent
。さらに、セッションCookie(ログインしている場合)がブラウザにのみ存在するため、一部のブラウザのダウンロードが成功する場合があります。