cURL là một gói chứa các công cụ khác nhau để truyền dữ liệu giữa các máy chủ từ xa. Nó hỗ trợ FTP, Windows Shares, Máy chủ Thư và tất nhiên là Máy chủ Web sử dụng HTTP.
Tải xuống tệp từ Linux shell thường được thực hiện bằng cURL lệnh như vậy:
curl https://example.org/file.zip --output file.zip
Điều này thực hiện yêu cầu đối với tệp bằng phương thức GET và chỉ cần tải xuống.
Bài viết này sẽ hướng dẫn chi tiết cách sử dụng cURL để thực hiện yêu cầu ĐĂNG, bao gồm cả dữ liệu biểu mẫu. Điều này có thể hữu ích nếu máy chủ yêu cầu thông tin xác thực để tải xuống tệp hoặc nếu bạn đang xây dựng một tập lệnh tự động để gửi dữ liệu đến một biểu mẫu web để lưu trữ trong cơ sở dữ liệu.
Nó cũng sẽ liên quan đến việc gửi dữ liệu XML hoặc JSON từ một tệp để sử dụng với API REST.
ĐĂNG các trường được mã hóa URL bằng cURL
Đối với các ví dụ của chúng tôi, chúng tôi sẽ gửi dữ liệu biểu mẫu sau:
Tên trường | Giá trị |
---|---|
field1 | giá trị1 |
field2 | value2 |
Dữ liệu sẽ được gửi đến URL https://example.org/submit.php . Địa chỉ trên example.org không thực sự tồn tại, nó chỉ là một miền web mà chúng tôi có thể sử dụng một cách an toàn để làm ví dụ. submit.php cũng là một tên ví dụ cho tập lệnh gửi biểu mẫu và không tham chiếu đến bất kỳ điều gì cụ thể.
Dữ liệu biểu mẫu có thể được chuyển tới yêu cầu POST dưới dạng một chuỗi đơn với mỗi trường biểu mẫu và giá trị của nó được xác định bởi name =value và tách chúng bằng & sử dụng –data tùy chọn:
curl --data "field1=value1&field2=value2" https://example.org/submit.php
Tuy nhiên, điều này không lý tưởng vì nó yêu cầu URL được mã hóa dữ liệu - tức là dữ liệu có khoảng trắng và dấu gạch chéo được thay thế bằng mã đặc biệt để định dạng chúng để gửi qua HTTP. Bạn có thể làm điều này theo cách thủ công, nhưng cURL có thể làm điều đó cho bạn bằng cách sử dụng –data-urlencode :
curl --data-urlencode "field1=value1&field2=value2" https://example.org/submit.php
Tên trường không được mã hóa URL - nếu bạn muốn mã hóa chúng thì hãy đặt tiền tố cho chúng bằng = :
curl --data-urlencode "=user name=Linus Torvalds" https://example.org
Chúng tôi sẽ sử dụng –data-urlencode cho các ví dụ sau thay vì –data để thực hiện các yêu cầu ĐĂNG để giúp mọi thứ trở nên dễ dàng.
Các trường được mã hóa URL được chỉ định riêng biệt
Mỗi tên / giá trị trường biểu mẫu có thể được chuyển riêng - điều này làm cho mọi thứ dễ đọc hơn nhiều:
curl --data-urlencode "field1=value1" --data-urlencode "field2=value2" https://example.org/submit.php
Multipart / Tải lên tệp bằng cURL
Yêu cầu biểu mẫu nhiều phần, bao gồm cả tệp, có thể được gửi qua POST bằng cách sử dụng – biểu mẫu quyền mua. Ví dụ dưới đây sẽ tải myfile.txt lên trường biểu mẫu tải tệp lên:
curl --form "[email protected]" https://example.org/submit.php
Multipart với Trường và Tệp và Tên tệp
Các cặp giá trị và tên trường biểu mẫu cũng có thể được bao gồm trong tệp tải lên và tên tệp cho một tệp đã tải lên nếu bạn muốn thay đổi nó:
curl --form "[email protected];filename=newfilename.txt" --form field1=value1 --form field2=value2 https://example.org/submit.php
Không có dữ liệu
Để thực hiện một yêu cầu ĐĂNG mà không có bất kỳ dữ liệu nào, chỉ cần chuyển một chuỗi trống:
curl --data-urlencode '' https://example.org/submit.php
Hiển thị Tiến trình Tải lên Tệp
Để theo dõi quá trình tải lên đang diễn ra như thế nào, hãy thêm -o đầu ra tùy chọn để hiển thị thanh tiến trình:
curl --tr-encoding -X POST -v -# -o output -T myfile.dat https://example.org/submit.php
Gửi dữ liệu được lưu trữ trong tệp
Nếu tải lên dữ liệu đã được lưu trữ trong một tệp, tất cả dữ liệu đó có thể được gửi cùng một lúc, thay vì phân tích dữ liệu đó thành lệnh cURL:
curl --data-urlencode [email protected] https://example.org/submit.php
Dữ liệu JSON và XML có thể được ĐĂNG cho các dịch vụ API có lập trình bằng cách thêm các tiêu đề thích hợp:
curl -X POST --data-urlencode @myfile.txt https://example.org/submit.php --header "Content-Type:text/xml" curl -X POST --data-urlencode @myfile.txt https://example.org/submit.php --header "Content-Type:application/json"
Kết luận
Thành thạo cURL là rất quan trọng nếu bạn thường xuyên làm việc trên dòng lệnh Linux. Nó có thể thực hiện nhiều tác vụ mà bạn thường có thể cần một trình duyệt web đầy đủ, ngoài việc sử dụng nó tương tác với các API có lập trình và để truyền dữ liệu đến và từ các máy chủ của riêng bạn.
Xem các bài viết về shell và script Linux khác của chúng tôi tại đây!