Làm thế nào để thực hiện một yêu cầu PUT với curl?


412

Làm cách nào để kiểm tra phương thức RESTful PUT (hoặc XÓA) bằng cách sử dụng curl?

Câu trả lời:


566

Sử dụng -Xcờ với bất kỳ động từ HTTP nào bạn muốn:

curl -X PUT -d arg=val -d arg2=val2 localhost:8080

Ví dụ này cũng sử dụng -dcờ để cung cấp các đối số với yêu cầu PUT của bạn.


17
"man curl" trên -X: "Thông thường bạn không cần tùy chọn này. Tất cả các loại yêu cầu GET, HEAD, POST và PUT được gọi bằng cách sử dụng các tùy chọn dòng lệnh chuyên dụng." Nhưng tôi không thể tìm thấy một cách khác.
Martin C. Martin

44
Một năm sau, tôi tìm được cách! curl -T
Martin C. Martin

2
Vì câu trả lời của Martin C. Martin cũng thay đổi thành GET sau khi chuyển hướng từ máy chủ, đây là câu trả lời hữu ích hơn theo quan điểm của tôi.
Martin

2
Để đạt được GETsau khi chuyển hướng, hãy thêm tham số--location
Martin M

1
Curl 7.47 và điều này sẽ không làm việc cho tôi. Câu trả lời của theabraham luôn mặc định để đăng hành vi. --get (hoặc -G) tuy nhiên sẽ buộc các trường -d (--data) trở thành tham số url và không hoạt động.
James Powell

101

Câu trả lời nhanh:

Trong một dòng duy nhất, lệnh curl sẽ là:

a) Nếu gửi dữ liệu biểu mẫu:

curl -X PUT -H "Content-Type: multipart/form-data;" -F "key1=val1" "YOUR_URI"

b) Nếu gửi dữ liệu thô dưới dạng json:

curl -X PUT -H "Content-Type: application/json" -d '{"key1":"value"}' "YOUR_URI"

c) Nếu gửi tệp có yêu cầu POST:

curl -X POST "YOUR_URI" -F 'file=@/file-path.csv'

Giải pháp thay thế:

Bạn có thể sử dụng ứng dụng POSTMAN từ Cửa hàng Chrome để nhận yêu cầu tương đương. Điều này đặc biệt hữu ích khi viết các yêu cầu phức tạp hơn.

Đối với yêu cầu với các định dạng khác hoặc cho các máy khách khác nhau như java, PHP, bạn có thể kiểm tra POSTMAN / bình luận bên dưới.

POSTman để lấy mã yêu cầu


4
Không biết tại sao điều này đã bị hạ cấp ... Tôi đã sao chép ở đây ý tưởng làm thế nào để vượt qua cơ thể JSON cho PUT curl. Ngoài ra người đưa thư là công cụ khá tuyệt vời để lấy mã curl cho các truy vấn phức tạp hơn :)
Mikael Lepistö

2
Cảm ơn !! Ngay cả tôi cũng không biết tại sao về các downvote. Có thể miễn cưỡng của người dùng để áp dụng nó. Tôi đã tạo ra một phản hồi của tất cả các apis REST của mình cho điện thoại di động trong POSTMAN và đó là mẹo năng suất tốt nhất mà tôi có thể đề xuất cho bất kỳ ai làm việc với REST.
Prateek

Ví dụ trong thế giới thực nơi tôi chuyển dữ liệu và tham số json ở điểm cuối; curl -X PUT -H "Loại nội dung: application / json" -d '{"số tiền": "999", "loại": "xe hơi", "Parent_id": "12345"}' localhost: 8080 / giao dịch / giao dịch / 2222
vikramvi

1
Phải cài đặt một trình duyệt hoàn chỉnh (nếu một trình duyệt không có Chrome) và một tiện ích mở rộng cho nó có thể là quá mức cần thiết đối với một số người. Ít nhất bạn có thể đã cung cấp một giải pháp thay thế cho một trình duyệt web phổ biến hơn (cài đặt mặc định) khác như Firefox, nơi mà HTTPRequester thực hiện một công việc tương tự.
rbaleksandar

5
Nó có thể bị bỏ qua vì câu hỏi là về curl.
tuxayo

28

Một ví dụ PUT sau bình luận của Martin C. Martin:

curl -T filename.txt http://www.example.com/dir/

Với -T(giống như --upload-file) curl sẽ sử dụng PUT cho HTTP.


8
Thật không may, -Tkhông có gì thay thế -X PUTnếu bạn muốn chỉ định tham số bằng -dhoặc -F. -Tgửi nội dung của tệp qua PUT. Để đạt được GETsau khi chuyển hướng, hãy thêm tham số--location
Martin M

Điều gì nếu filename.txt trong máy chủ từ xa?
bosari

7
curl -X PUT -d 'new_value' URL_PATH/key

Ở đâu,

X - tùy chọn được sử dụng cho lệnh yêu cầu

d - tùy chọn được sử dụng để đưa dữ liệu vào url từ xa

URL_PATH - url từ xa

new_value - giá trị mà chúng tôi muốn đặt vào khóa của máy chủ


5

Tôi đến trễ chủ đề này, nhưng tôi cũng có một yêu cầu tương tự. Vì tập lệnh của tôi đang xây dựng yêu cầu cuộn tròn một cách linh hoạt, tôi muốn có một cấu trúc tương tự của lệnh trên GET, POST và PUT.

Đây là những gì làm việc cho tôi

Đối với yêu cầu PUT :

curl --request PUT --url http://localhost:8080/put --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Đối với yêu cầu POST :

curl --request POST --url http://localhost:8080/post --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Đối với yêu cầu NHẬN :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.