2011-12-14 44 views
70

Curl cung cấp một loạt các cuộc gọi phương thức http khác nhau được bắt đầu bằng dấu X, nhưng cũng cung cấp các phương thức giống nhau mà không cần. Tôi đã thử cả hai và tôi dường như không thể tìm ra sự khác biệt. Ai đó có thể giải thích cho tôi một cách nhanh chóng như thế nào hai hoạt động này khác nhau?curl -GET và -X GET

Trả lời

157

Theo mặc định, bạn sử dụng curl mà không nói rõ phương thức yêu cầu để sử dụng. Nếu bạn chỉ cần chuyển vào một URL HTTP như curl http://example.com, nó sẽ sử dụng GET. Nếu bạn sử dụng -d hoặc -F curl sẽ sử dụng POST, -I sẽ gây ra HEAD và -T sẽ biến nó thành PUT.

Nếu vì bất kỳ lý do nào bạn không hài lòng với các lựa chọn mặc định cuộn tròn cho bạn, bạn có thể ghi đè các phương thức yêu cầu đó bằng cách chỉ định -X [WHATEVER]. Bằng cách này, bạn có thể gửi một DELETE bằng cách thực hiện curl -X DELETE [URL].

Do đó, vô nghĩa khi thực hiện curl -XGET [URL] vì GET cũng sẽ được sử dụng. Trong cùng một tĩnh mạch là vô nghĩa để làm curl -X POST -d data [URL]... Nhưng bạn có thể thực hiện một yêu cầu vui vẻ và hơi hiếm mà gửi một yêu cầu-cơ thể trong một yêu cầu GET với một cái gì đó như curl -X GET -d data [URL].

Đào sâu hơn

curl -GET (sử dụng một dấu gạch ngang duy nhất) chỉ là sai cho mục đích này. Điều này tương đương với việc chỉ định các tùy chọn -G, -E-T và điều đó sẽ làm điều gì đó hoàn toàn khác.

Ngoài ra còn có một tùy chọn curl được gọi là --get để không gây nhầm lẫn các vấn đề với một trong hai. Đó là dạng dài -G, được sử dụng để chuyển đổi dữ liệu được chỉ định với -d thành yêu cầu GET thay vì POST.

(tôi sau đó sử dụng câu trả lời của riêng tôi ở đây để cư curl FAQ to cover this.)

Cảnh báo trong 7.45.0 và sau

Trong các phiên bản hiện đại của curl, nó sẽ thông báo cho người dùng về việc sử dụng không cần thiết này -X Khi chế độ tiết được bật (-v) - để làm cho người dùng biết. Giải thích thêm và có động lực trong this blog post.

+1

-XGET có thể là no-op, nhưng nó làm cho nó rõ ràng. – mtyson

+0

"Theo mặc định, bạn sử dụng curl mà không nói rõ phương thức yêu cầu để sử dụng. Nếu bạn chỉ cần chuyển vào một URL HTTP như curl http://example.com, nó sẽ sử dụng GET. Nếu bạn sử dụng -d hoặc -F curl sẽ sử dụng POST , -Tôi sẽ gây ra HEAD và -T sẽ biến nó thành PUT. " Mọi thư bạn cân biêt. – Donato

0

Có lẽ tôi không theo dõi câu hỏi của bạn, nhưng có vẻ như có tùy chọn -G chỉ cho phép curl sử dụng phương thức GET và sau đó có tùy chọn -X cho phép bạn thực hiện các phương thức bất cứ điều gì bạn muốn. Vì vậy, curl -G và curl -XGET sẽ giống nhau. Tôi không nhìn thấy một -GET có vẻ như curl chỉ bỏ qua bất cứ điều gì sau -G.

+2

Trên thực tế "-nhận curl" bằng -G -E và -T. Tất cả các tùy chọn tên dài để cuộn tròn được sử dụng với hai dấu gạch ngang, như trong --url hoặc --user. –

+0

Đúng vậy. Tôi không nghĩ ở đó. – masebase

3

-x [phương pháp của bạn]
x cho phép bạn ghi đè mặc định 'Get'

+0

không, chữ thường -x đặt proxy để sử dụng ... –