Cách sử dụng lệnh cURL trong Linux

Bất kể bạn sử dụng máy tính để làm gì, thì ít nhất một lần bạn đã cần tải xuống một file nào đó và việc mở trình duyệt có vẻ như quá mức cần thiết. Đây sẽ là lúc cURL thực sự phát huy được vai trò.

Như tên gọi của nó cho thấy, cURL là một công cụ dòng lệnh để truyền dữ liệu bằng URL. Một trong những cách sử dụng đơn giản nhất là tải xuống một file thông qua dòng lệnh. cURL là một công cụ cực kỳ mạnh mẽ tùy thuộc vào cách bạn sử dụng nó. Ngay cả khi bạn đã quen thuộc với việc sử dụng dòng lệnh, thì cũng rất khó để khai thác hết toàn bộ tiềm năng của cURL.

Chức năng cơ bản của CURL

Một trong những điều cơ bản nhất bạn có thể làm với cURL là tải xuống một trang web hoặc file. Để làm điều này, bạn chỉ cần sử dụng lệnh curl theo sau là một URL. Ví dụ như:

curl https://www.google.com

Trong hầu hết mọi tình huống, sử dụng lệnh theo cách này sẽ giúp bạn nhận được một terminal chứa đầy đủ dữ liệu HTML raw (thô) (trong trường hợp lý tưởng nhất) hoặc các ký tự không thể đọc được (trong trường hợp xấu nhất). Nếu bạn muốn lưu nó vào một file, bạn có thể sử dụng các tính năng chuyển hướng chuẩn Unix để làm điều này.

curl https://www.google.com > google.html

Theo dõi các HTTP Header

Trình duyệt thường sửa lỗi này cho bạn, nhưng Internet thì khác. Khi bạn nhập một URL, rất có thể bạn sẽ được chuyển hướng một hoặc nhiều lần trước khi đến trang đích.

Ví dụ, nói rằng bạn đang cố gắng truy cập trang web Quản Trị Mạng. Nhập lệnh sau sẽ giúp bạn nhận được thông báo chuyển hướng:

curl http://quantrimang.com

Bạn có thể theo dõi các header vị trí HTTP này bằng cách sử dụng flag -L như sau:

curl -L http://quantrimang.com

Theo dõi HTTP header

Trông không tuyệt lắm trong terminal, nhưng cũng là một tùy chọn nên biết.

Lưu kết quả cURL vào một file

Có một số cách để lưu nội dung URL vào một file. Tùy chọn -o cho phép bạn quyết định tên file, trong khi tùy chọn -O sử dụng tên file trong URL để lưu. Để chọn file của riêng bạn, hãy sử dụng tùy chọn sau:

curl -o filename.html https://example.com/url

Thường thì bạn sẽ muốn lưu một file với cùng tên mà nó sử dụng trên máy chủ. Để làm điều đó, hãy sử dụng tùy chọn -O.

curl -O https://example.com/filename.html

Lưu kết quả vào file

Tải xuống nhiều file cùng một lúc

Nếu bạn cần tải xuống một vài file cùng một lúc, cURL sẽ giúp bạn dễ dàng thực hiện việc này với tùy chọn -O.

curl -O https://example.com/file1.html -O https://example.com/file2.html

Tải nhiều file một lúc

Khi tải xuống theo cách này, cURL sẽ cố gắng sử dụng lại kết nối thay vì tạo kết nối mới mỗi lần.

Tiếp tục quá trình tải xuống đã bị dừng

Chẳng vui vẻ gì khi quá trình tải xuống dừng lại giữa chừng. May mắn thay, cURL giúp bạn dễ dàng tiếp tục tải xuống mà không phải bắt đầu lại từ đầu. Cú pháp hơi lạ, vì bạn cần thêm -C - vào lệnh.

Giả sử bạn đã bắt đầu tải xuống với lệnh sau:

curl -O https://example.com/bigfile.zip

Sau đó, bạn đã dừng nó bằng cách nhấn Ctrl + C. Bạn có thể tiếp tục lại bằng lệnh sau:

curl -C - -O https://example.com/bigfile.zip

Sử dụng xác thực HTTP cơ bản

Xác thực HTTP cơ bản sẽ không hoạt động với những thứ yêu cầu tên người dùng và mật khẩu. Nhưng nếu máy chủ sử dụng xác thực HTTP cơ bản, cURL sẽ có thể hoạt động với tính năng này. Để tải xuống một file có xác thực tên người dùng và mật khẩu, bạn có thể sử dụng lệnh sau:

curl -u username:password -O http://example.com/filename.html

Xác thực HTTP cơ bản

Lệnh này cũng hoạt động với các FTP server, vì cURL hỗ trợ rất nhiều giao thức khác nhau.

Có rất nhiều thứ bạn có thể làm với cURL. Đôi khi bạn có thể cảm thấy tất cả các chức năng mà cURL cung cấp có thể quá nhiều. Nếu cảm thấy cURL quá phức tạp, bạn có thể lựa chọn một giải pháp khác đơn giản hơn: GNU wget.

Mặc dù cURL cung cấp tất cả các tùy chọn bạn mong muốn, nhưng wget mới thực sự cung cấp các tùy chọn mặc định tốt nhất cho bạn. Nếu không chắc chắn đâu là lựa chọn phù hợp, hãy đọc bài so sánh chi tiết về cURL và wget của Quản Trị Mạng để đưa ra quyết định.

Cách giới hạn thời gian yêu cầu curl

Khi nói đến việc thực hiện các yêu cầu trên web, thời gian là yếu tố rất quan trọng. Không ai muốn chờ để load trang web hay đợi máy chủ phản hồi. Nếu bạn đang sử dụng curl để tìm nạp dữ liệu từ web, bạn sẽ rất vui khi biết rằng có nhiều cách để giới hạn thời gian yêu cầu.

Dưới đây là cách giới hạn thời gian yêu cầu curl để đảm bảo rằng bạn luôn kiểm soát được các hoạt động tìm nạp dữ liệu của mình.

Phương pháp 1: Sử dụng tùy chọn --max-time

Trong khi chạy lệnh curl, bạn có thể chỉ định tùy chọn -m hoặc --max-time để đặt giới hạn thời gian nghiêm ngặt cho yêu cầu. Tùy chọn này cho phép bạn chỉ định thời gian tối đa, tính bằng giây, mà bạn sẵn sàng cho phép lệnh thực hiện trước khi thoát với mã lỗi timeout (28):

curl --max-timе [sеconds] [URL]

Bạn có thể xác định mức tối đa với độ chính xác thập phân, trong đó 0,3 nghĩa là 300 mili giây, 5,46 nghĩa là 5.460 mili giây và 20 nghĩa là 20 giây.

Ví dụ:

curl -o test.md --max-time 30 https://github.com/test/file1
Sử dụng tùy chọn --max-time với curl trên Ubuntu
Sử dụng tùy chọn --max-time với curl trên Ubuntu

Lệnh này gửi yêu cầu tới URL GitHub được cung cấp. Nó sẽ lưu dữ liệu phản hồi dưới dạng test.md và kết thúc trong thời gian tối đa là 30 giây.

Phương pháp 2: Sử dụng tùy chọn --connect-timeout

Để kiểm soát thời gian cố gắng kết nối với máy chủ, hãy sử dụng tùy chọn --connect-timeout. Điều này đặt giới hạn thời gian tối đa để curl hoàn tất các bước kết nối, bao gồm tra cứu DNS và các lần handshake TCP, TLS hoặc QUIC tiếp theo.

Nếu curl không thể thiết lập kết nối trong khung thời gian bạn chỉ định, nó sẽ thoát với mã lỗi timeout (28):

curl --connect-timeout [seconds] [URL]

Ví dụ:

curl -o test.md --connect-time 20 https://github.com/test/file
Sử dụng tùy chọn --connect-timeout với curl trên Ubuntu
Sử dụng tùy chọn --connect-timeout với curl trên Ubuntu

Tại đây, lệnh curl truy xuất file được chỉ định trong URL, lưu file đó dưới dạng test.md và thực thi giới hạn 20 giây để thiết lập kết nối với máy chủ.

Thứ Năm, 16/11/2023 15:26
53 👨 6.069
0 Bình luận
Sắp xếp theo
    ❖ Linux