2012-11-14 25 views
92

URLのパラメータにCURLを使用してDELETEリクエストを送信しようとしています。私がやっている:http://localhost:5000/locations?id=3、それは動作します:CURLコマンドラインURLパラメータ

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

ただし、サーバーは、私はいくつかのGUIアプリケーションを使用してみましたし、私のようにURLを渡したときにパラメータID = 3を見ていません。私はむしろこのGUIアプリケーションではなくCURLを使用したいと思っています。誰も私が間違っていることを指摘できますか?

答えて

149

"application/x-www-form-urlencoded"ヘッダー、なぜですか?それを試してみてください:

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

または

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

それは働いた。私はちょうどURLがパラメータを受け入れるために引用符の間になければならないことに気づいた。そのMIMEタイプは、パラメータを持つURL用であり、GUIアプリケーションが使用するものです。また、私は 'GET'をしたくありません。私は 'DELETE'をしたいが' GET'はしたくないので、適切なRESTの設計基準に従おうとしているので、削除するときはDELETEを使い、GETは使わない。 – darksky

+1

私の場合、二重引用符でのみ動作します。 curl:(1)プロトコル 'httpはlibcurlでサポートされていないか無効になっています。 引用符で正しく動作します。 –

73

Felipsmartinsが正しいです。

これは、POST要求でない場合は、実際には-d/- dataオプションを使用できないためです。しかし、これは-Gオプションを使用しても可能です。あなたがこれを行うことができることを意味し

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

ここでは少し愚かですが、コマンドラインであり、あなたは多くのパラメータを持っている場合、それはたくさん整然とです。

私はこれを言っています。なぜなら、cURLコマンドは通常かなり長いため、改行をエスケープする複数行にする価値があります。

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

これは、zshを使用すると明らかに快適です。以前のコマンドを再編集する必要があるときは、zshを使用すると1行ずつ移動できるためです。 (ちょうど言っている)

希望する。

+6

ライフセーバー!ありがとう!私はGETで--data-urlencodeを使いたい場所にスクリプトを持っています。これにより、パラメータを手動でURLエンコードする必要がなくなりました。ありがとう! –

+0

-X DELETE -Gが実際にPOSTリクエストであることを意味していますか? – huggie

-6

あなたのパラメータが数値であれば、あなたもこれを行うことができます: '3は' あなたのパラメータある

curl -X DELETE localhost:5000/locations/3

を。

+6

これは完全にサーバーの実装に依存します。 – Tim

関連する問題