Tham số URL dòng lệnh CURL


186

Tôi đang cố gắng gửi một DELETEyêu cầu với một tham số url bằng cách sử dụng CURL. Tôi đang làm:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

Tuy nhiên, máy chủ không thấy tham số id = 3. Tôi đã thử sử dụng một số ứng dụng GUI và khi tôi chuyển url dưới dạng : http://localhost:5000/locations?id=3, nó hoạt động. Tôi thực sự muốn sử dụng CURL hơn là ứng dụng GUI này. Bất cứ ai có thể vui lòng chỉ ra những gì tôi đang làm sai?

Câu trả lời:


269

Tiêu đề "application / x-www-form-urlencoding", tại sao? Dùng thử:

curl -X DELETE 'http://localhost:5000/locations?id=3'

hoặc là

curl -X GET 'http://localhost:5000/locations?id=3'

30
Nó đã làm việc. Tôi chỉ nhận ra rằng URL phải nằm giữa các trích dẫn để chấp nhận tham số. Loại MIME đó dành cho một URL có tham số và đó là những gì ứng dụng GUI sử dụng. Ngoài ra, tôi không muốn làm GET. Tôi muốn DELETEvà không GETvà tôi đang cố gắng tuân theo các tiêu chuẩn thiết kế REST phù hợp vì vậy tôi đang sử dụng XÓA và không NHẬN khi xóa.
darksky

1
Trong trường hợp của tôi, nó chỉ hoạt động với trích dẫn kép, với trích dẫn duy nhất nói curl: (1) Giao thức 'http không được hỗ trợ hoặc vô hiệu hóa trong libcurl Nhưng với trích dẫn "" hoạt động tốt.
Jeff_Alieffson

149

Felipsmartins là chính xác.

Điều đáng nói là bởi vì bạn không thể thực sự sử dụng tùy chọn -d / - data nếu đây không phải là một yêu cầu POST. Nhưng điều này vẫn có thể nếu bạn sử dụng tùy chọn -G.

Có nghĩa là bạn có thể làm điều này:

curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'

Ở đây thì hơi ngớ ngẩn nhưng khi bạn ở trên dòng lệnh và bạn có rất nhiều tham số, nó gọn gàng hơn rất nhiều.

Tôi đang nói điều này bởi vì các lệnh cURL thường khá dài, do đó, đáng để thực hiện trên nhiều dòng thoát khỏi các ngắt dòng.

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

Điều này rõ ràng là thoải mái hơn rất nhiều nếu bạn sử dụng zsh. Ý tôi là khi bạn cần chỉnh sửa lại lệnh trước đó vì zsh cho phép bạn đi từng dòng một. (chỉ nói)

Hy vọng nó giúp.


11
Cứu người! Cảm ơn người đàn ông! Tôi có một tập lệnh mà tôi muốn sử dụng --data-urlencode trên GET. Điều này làm cho nó để tôi không phải mã hóa thủ công các tham số của mình. Cảm ơn!
Nathan Wallace

3
Bạn đang ám chỉ rằng -X XÓA -G thực sự là một yêu cầu POST?
huggie

1
`-G, --get Đặt dữ liệu bài đăng vào URL và sử dụng GET` Không, nó chỉ thêm dữ liệu bài đăng vào url, -X [phương thức] được ưu tiên (nguồn: curl --help và kinh nghiệm)
DownloadPizza

Làm thế nào điều này có thể được phức tạp như vậy. Người ta có thể giả sử --data-urlencode thêm dữ liệu vào URL mà không có ngoại lệ, nhưng bây giờ bạn cần kết hợp nó với nó --getđể làm cho nó thực sự hoạt động.
Jaakko
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.