Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Thực hiện Yêu cầu ĐĂNG với cURL

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 "admin@wsxdn.com" 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 "admin@wsxdn.com;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 admin@wsxdn.com 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!