Tôi đang chạy Mac OS 10.11.6 El Capitan. Có một liên kết tôi muốn tải về theo chương trình:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Nếu tôi dán URL này vào bất kỳ trình duyệt nào (ví dụ Safari), quá trình tải xuống hoạt động hoàn hảo.
Tuy nhiên, nếu tôi cố tải xuống cùng một URL từ dòng lệnh bằng cách sử dụng curl
, thì nó không hoạt động. Kết quả là một tệp trống:
$ 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
$
Tất nhiên tôi có thể nhận được các tập tin thông qua trình duyệt, nhưng tôi muốn hiểu lý do tại sao các curl
lệnh trên không làm việc.
Tại sao không thể curl
tải xuống tệp này một cách chính xác, khi nó hiển thị rõ ràng trên trang web và có thể được truy cập và tải xuống chính xác thông qua trình duyệt web đồ họa?
curl -v
cho "verbose". Nó sẽ in ra lỗi tiêu chuẩn thông tin khác nhau về kết nối, yêu cầu và phản hồi. Trong trường hợp này, bạn sẽ thấy rằng phản hồi bao gồm HTTP 302 Found
(mã chuyển hướng) và Location
tiêu đề có URL đi đến. Sau đó, bạn có thể man curl
tìm hiểu làm thế nào để nói với nó để đi theo chuyển hướng.
User-Agent
. Ngoài ra, một số tải xuống trình duyệt có thể thành công do cookie phiên (tức là nếu bạn đã đăng nhập) chỉ hiện diện trên trình duyệt đã nói.