ฉันใช้ 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
ดาวน์โหลดไฟล์นี้ได้อย่างถูกต้องเมื่อไฟล์นั้นปรากฏบนเว็บไซต์และสามารถเข้าถึงและดาวน์โหลดได้อย่างถูกต้องผ่านเว็บเบราว์เซอร์กราฟิก
curl -v
สำหรับ "verbose" มันจะพิมพ์ไปยังข้อผิดพลาดมาตรฐานข้อมูลต่างๆเกี่ยวกับการเชื่อมต่อการร้องขอและการตอบสนอง ในกรณีนี้คุณจะเห็นว่าการตอบสนองนั้นรวมถึงHTTP 302 Found
(รหัสการเปลี่ยนเส้นทาง) และLocation
ส่วนหัวที่มี URL ที่จะไป จากนั้นคุณสามารถman curl
ค้นหาวิธีบอกให้ทำตามการเปลี่ยนเส้นทาง
User-Agent
ซอฟแวร์ป้องกันดังกล่าวตรวจสอบโดยทั่วไปสำหรับส่วนหัวของเบราว์เซอร์ที่ทำงานได้เช่นมีที่เหมาะสม นอกจากนี้การดาวน์โหลดเบราว์เซอร์บางครั้งอาจประสบความสำเร็จเนื่องจากคุกกี้เซสชัน (เช่นหากคุณลงชื่อเข้าใช้) จะปรากฏบนเบราว์เซอร์ดังกล่าวเท่านั้น