CURL Command in Linux: Giới thiệu lệnh Curl

Linux

Trong bài viết này chúng ta sẽ tìm hiểu đến lệnh curl (cURL) trong Linux. cURL là 1 tiện ích mạnh mẽ hỗ trợ nhiều giao thức như HTTP, HTTPS và FTP. Nó hỗ trợ nhiều tính năng bao gồm POST, cookies, chứng thực, tải các tập tin được chia nhỏ, giới hạn tốc độ tải tập tin, giới hạn kích thước tối đa của tập tin được tải, hiển thị thanh tiến trình .v.v…

Cài đặt

cURL thường không được cài đặt mặc định trong đa số các bản phân phối Linux, trong trường hợp này chúng ta cần cài đặt cURL như sau:

$ yum install -y curl

 Cú pháp

Mặc định thì curl sẽ xuất dữ liệu được tải ra stdout và hiển thị thông tin của quá trình tải ra stderr.

$ curl URL

Nếu chúng ta không muốn hiển thị các thông tin của quá trình tải, chúng ta có thể sử dụng tùy chọn–silent.

$ curl --silent URL

Lệnh curl có thể được sử dụng để thực hiện nhiều việc khác nhau, như là tải, gửi các yêu cầu HTTP khác nhau, và chỉ rõ các trường header của gói tin HTTP.

Lưu dữ liệu tải vào tập tin

Như ở trên đã nói, mặc định curl sẽ xuất (in ra) dữ liệu tải về ra stdout. Để ghi các dữ liệu tải được này vào 1 tập tin với tên được lấy từ URL thay cho việc ghi các dữ liệu này ra màn hình (stdout), chúng ta sử dụng tùy chọn -O như sau:

$ curl URL --silent -O

Nếu trong URL không xuất hiện tên tập tin, thì chúng ta sẽ gặp thông báo lỗi sau:

curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information

Ví dụ:

$ curl http://google.com.vn --silent -O
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information

Chỉ định tên tập tin lưu dữ liệu

Ở trên chúng ta đã tìm hiểu cách lưu dữ liệu được tải về bởi cURL vào 1 tập tin, mặc định cURL sẽ tìm tên tập tin trong URL, nếu không có thì cURL sẽ xuất ra lỗi như đã trình bày ở trên.

Trong trường hợp này, chúng ta có thể chỉ ra tên tập tin lưu dữ liệu 1 cách tường mình, khi đó cURLsẽ dùng tập tin mà chúng ta chỉ định để lưu dữ liệu tải về, thay cho việc tự động tìm trong URL như ở trên. Việc này giúp ích cho chúng ta trong việc muốn lưu nội dung tải về vào 1 tập tin khác với tập tin mặc định trong URL, hoặc trong trường hợp URL không có tên tập tin.

Để chỉ định tên tập tin lưu dữ liệu, chúng ta sử dụng tùy chọn -o như sau:

$ curl URL --silent -o new_filename

Hiển thị thông tin quá trình tải

Để hiển thị thanh tiến trình trong quá trình tải ra stdout, thay cho stderr, sử dụng tùy chọn –progressthay cho –silent như sau:

$ curl http://google.com.vn -o index.html --progress
#################################################### 100.0%

Tiếp tục và nối lại (resume) việc tải

cURL có 1 tính năng  cho phép chúng ta nối lại việc tải tập tin tại 1 vị trí (offset) cho trước. Nó giúp chúng ta tải các tập tin được chia nhỏ bằng việc chỉ rõ vị trí (offset) tiếp tục tải:

$ curl URL/file -C offset

Giá trị offset là 1 giá trị số nguyên tính bằng byte.

cURL không yêu cầu chúng ta biết chính xác giá trị offset, nếu chúng ta muốn nối lại việc tải 1 tập tin. Nếu chúng ta muốn cURL tìm ra điểm tiếp tục, sử dụng tùy chọn -C – như sau:

$ curl -C - URL

cURL sẽ tự động tìm ra nơi để bắt đầu lại việc tải của tập tin được chỉ rõ.

Thiết lập chuỗi referer với cURL

Referer là 1 chuỗi trong phần header của gói tin HTTP, được dùng để định danh trang mà từ đó người dùng đến trang web hiện tại. Khi người dùng nhấp vào 1 liên kết trên trang web A đế đi đến trang web B, chuỗi referer cho trang B sẽ chứa URL của trang A.

Chúng ta có thể sử dụng tùy chọn –referer với lệnh curl để thiết lập chuỗi referer như sau:

$ curl --referer Referer_URL target_URL

Ví dụ:

$ curl --referer http://google.com http://slynux.org

Cookie với cURL

Bằng việc sử dụng curl, chúng ta có thể chỉ ra, cũng như lưu trữ các cặp giá trị cookie mà chúng ta gặp trong suốt các tiến trình HTTP.

Để chỉ ra các cặp cookie, sử dụng tùy chọn –cookie “COOKIES”. Trong đó COOKIES là các cặp cookie mà chúng ta sẽ thiết lập với curl.

Cookie được cung cấp dưới dạng cặp khóa = giá trị. Nhiều cặp cookie sẽ được phân tách với nhau bởi dấu chấm phẩy ;.


Ví dụ:

$ curl http://example.com --cookie "user=slynux;pass=hack"

Để chỉ ra 1 tập tin nơi mà các cặp cookie được lưu trữ, sử dụng tùy chọn –cookie-jar. Ví dụ:

$ curl URL --cookie-jar cookie_file

Thiết lập chuỗi user agent với cURL

Trong tin học, user agent là 1 phần mềm đại diện cho 1 người dùng. Ví dụ, 1 chương trình đọc mail là 1 mail user agent.

Trong nhiều trường hợp, 1 user agent hoạt động như 1 client trong 1 giao thức mạng được dùng trong các giao tiếp bên trong 1 hệ thống máy tính phân tán client – server. Trong giao thức HTTP, chuỗi user agent cho phép máy chủ HTTP nhận biết thiết bị nào và phần mềm nào đang gửi yêu cầu đến nó.

1 vài trang web kiểm tra user agent sẽ không hoạt động nếu không có chuỗi user agent tồn tại trong gói tin yêu cầu của HTTP. 1 số website cũ còn hoạt động đến ngày nay chỉ hoạt động trên Internet Explorer (IE). Nếu 1 trình duyệt khác được dùng, nó sẽ hiển thị ra 1 thông điệp là chỉ chạy trên IE. Đó là bởi vì website đó kiểm tra user agent. Chúng ta có thể thiết lập giá trị user agent với curl.

Sử dụng tùy chọn –user-agent hoặc -A để thiết lập giá trị user agent trong curl như sau:

$ curl URL --user-agent "Mozilla/5.0"

Thiết lập header trong HTTP

Chúng ta có thể thiết lập các thông tin cho phần header của gói tin HTTP với lệnh curl bằng cách sử dụng tùy chọn -H như sau:

$ curl -H "Host: www.example.com" -H "Accept-language:en" URL

Giới hạn băng thông trong cURL

Để giới hạn băng thông trong curl,  sử dụng tùy chọn –limit-rate như sau:

$ curl URL --limit-rate 20k

Trong đó:

  • k – kilobyte (KB)
  • m – megabyte (MB)

Giới hạn dung lượng tải tối đa

Để giới hạn dung lượng tối đa được phép tải trong curl, sử dụng tùy chọn –max-filesize như sau:

$ curl URL --max-filesize bytes

Lệnh trên sẽ trả về 1 mã khác 0 nếu như kích thước tập tin vượt qua giới hạn. Và sẽ trả về 0 nếu thành công.

Chứng thực với cURL

Chứng thực HTTP hoặc chứng thực FTP có thể thực hiện được bằng việc sử dụng cURL với đối số -u. Tên đăng nhập và mật khẩu có thể được chỉ ra bằng việc sử dụng -u username:password. Có thể không cung cấp mật khẩu, trong trường hợp này chúng ta sẽ được yêu cầu nhập mật khẩu tại dấu nhắc lệnh.

Ví du:

$ curl -u user:pass http://test_auth.com

Trong trường hợp chúng ta không muốn nhập mật khẩu trực tiếp trong lệnh vì lý do bảo mật.

$ curl -u user http://test_auth.com
Enter host password for user 'user':

In ra phần header của gói tin phản hồi, bỏ qua dữ liệu

Sẽ hữu dụng khi chỉ in ra phần header của gói tin phản hồi cho mục đích kiểm tra hoặc thống kê. Ví dụ, để kiểm tra xem 1 trang có thể truy cập hay không, chúng ta không cần tải toàn bộ nội dung của trang; chỉ đọc phần header của gói tin phản hồi HTTP có thể được dùng để nhận diện xem 1 trang hoạt động hay không.

1 trong những ví dụ cho việc kiểm tra phần header  của gói tin phản hồi HTTP, là để kiểm tra kích thước tập tin trước khi tải. Chúng ta có thể kiểm tra tham số Content-Length trong phần header của HTTP để tìm ra kích thước của 1 tập tin trước khi tải. Còn nữa, vài tham số hữu ích có thể lấy được từ header. Tham số Last-Modified cho phép chúng ta biết thời gian tùy chỉnh gần nhất cho tập tin từ xa.

Sử dụng tùy chọn -I hoặc -head với curl để lấy chỉ phần header của HTTP, mà không cần tải tập tin. Ví dụ:

$ curl -I http://slynux.org
HTTP/1.1 200 OK
Date: Sun, 01 Aug 2010 05:08:09 GMT
Server: Apache/1.3.42 (Unix) mod_gzip/1.3.26.1a mod_log_bytes/1.2
mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.7a
Last-Modified: Thu, 19 Jul 2007 09:00:58 GMT
ETag: "17787f3-3bb0-469f284a"
Accept-Ranges: bytes
Content-Length: 15280
Connection: close
Content-Type: text/html

Chúng ta kết thúc bài tìm hiểu về lệnh curl trong Linux tại đây. Chúc các bạn thành công!

Xem thêm loạt bài tổng hợp câu lệnh Linux 


Nguồn: Passion

Share: