CURLコマンドラインURLパラメータ


186

DELETECURLを使用して、urlパラメータを含むリクエストを送信しようとしています。私がやっている:

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

ただし、サーバーにはパラメーターid = 3が表示されません。いくつかのGUIアプリケーションを使用してみましたが、URLを次のように渡した場合http://localhost:5000/locations?id=3、機能します。このGUIアプリケーションではなく、CURLを実際に使用したいと思います。誰かが私が間違っていることを指摘できますか?

回答:


269

「application / x-www-form-urlencoded」ヘッダー、なぜですか?やってみよう:

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

または

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

30
出来た。パラメータを受け入れるには、URLを引用符で囲む必要があることに気づきました。そのMIMEタイプは、パラメーター付きのURL用であり、それはGUIアプリケーションが使用するものです。また、したくないですGET。私はしたいのですがDELETEGET適切なREST設計標準に準拠しようとしているため、削除時にGETではなくDELETEを使用しています。
darksky

1
私の場合、二重引用符でのみ機能し、scurs curlで単一引用符が使用されます。(1)プロトコル「httpはlibcurlでサポートされていないか無効になっています
Jeff_Alieffson、2014

150

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行ずつ移動できるため、前のコマンドを再編集する必要があります。(ただ言って)

それが役に立てば幸い。


11
ライフセーバー!ありがとう!GETで--data-urlencodeを使用するスクリプトがあります。これにより、手動でパラメーターをURLエンコードする必要がなくなりました。ありがとう!
Nathan Wallace

3
-X DELETE -Gが本当にPOSTリクエストであることを意味していますか?
ハギー、2014

1
`-G、--get投稿データをURLに入れてGETを使用します`いいえ、投稿データをURLに追加するだけです-Xが優先されます(ソース:curl --help and experience)
DownloadPizza

これをどのように複雑にすることができますか?--data-urlencode 例外なくデータをURLに追加すると想定できますが、--get実際に機能させるには、と組み合わせる必要があります。
Jaakko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.