私の問題:POSTリクエストとともにいくつかのデータを送信している間にコマンドラインツールを使用してローカルホストサーバーをカールします。
エラーの原因と思われるもの:このようなものを想像してください
curl -i -X POST -H 'Content-Type: application/json' -d '{"data1": "data goes here", "data2": "data2 goes here"}' http:localhost/path/to/api
返されるデータの結果
curl: (6) Could not resolve Host: application; No data record of requested type
curl: (6) Could not resolve Host: data goes here,; No data record of requested type
curl: (6) Could not resolve Host: data2; No data record of requested type
curl: (3) [globbing] unmatched close brace/bracket at pos 16
いくつかの検索の後、UNIXシェルで機能するため、問題はリクエストに使用される構文ではないことがわかりました。
Windowsを使用している可能性がありますか?これは、シングルクォートとダブルクォートを適切に処理しない、完全に壊れたシェルのように見えます。私はちょうどそのコマンドラインを試してみましたが、私のlinuxボックスでうまく機能しました。 http://curl.haxx.se/mail/archive-2011-03/0066.html
私はそれらを回避するために「それをエスケープ」しようとしましたが、それでも動作しませんでした
2。
curl -i -X POST -H 'Content-Type:application/json' -d '{\ "data1 \":\ "data goes here \"、\ "data2 \":\ "data2 goes here\"} 'http:// localhost/path/to/api
3。
curl -i -X POST -H 'Content-Type:application/json' -d '{\ "data1 \":\ "data goes here \"、\ "data2 \":\ "data2 goes here\"} 'http:// localhost/path/to/api
だから私はあきらめた。 WindowsはPOSTで送信されたJSONオブジェクトを台無しにしているようです
私はwin7 x64ラップトップで同じ問題に遭遇し、非常によく似たコマンドライン形式を使用して Win64-Generic w SSL というラベルの付いたcurlリリースを使用して動作させることができました。
C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}"
エスケープされたものとヘッダーパラメータ値を二重引用符で囲むことで、2番目のエスケープバージョンとのみ異なります。間違いなくLinuxシェルの構文を好むでしょう。
引用符で戦うよりも簡単なコマンドラインの別の代替方法は、jsonをファイルに入れ、curlパラメーターの@プレフィックスを使用することです。 json.txtに次のようにします。
{ "syncheader" : {
"servertimesync" : "20131126121749",
"deviceid" : "testDevice"
}
}
私の場合、私は以下を発行します:
curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt
JSONも読みやすくします。
代替ソリューション:コマンドラインよりもユーザーフレンドリーなソリューション:
単純なGET以外のHTTPメソッドを使用してデータを送信および要求するユーザーフレンドリーな方法を探している場合、おそらくこのようなchrome拡張を探しているでしょう http://goo.gl/rVW22f 呼び出し済みAVANCED REST CLIENT
コマンドラインにとどまりたい人には、cygwinをお勧めします:
最終的に、CURLを使用してcygwinをインストールすることで、Linuxの感覚をWindowsで取得できます!
Cygwinコマンドラインを使用すると、この問題は停止し、最も重要でした。1で使用された要求構文は正常に機能しました。
便利なリンク:
私はこれに朝一晩を費やしたので、それが誰かを助けることを願っています
少なくとも、テストしたWindowsバイナリバージョン( Generic Win64 no-SSL binary 、現在は 7.33. に基づいています)では、コマンドの実行方法に制限があります行引数が解析されています。 xmasによる答えは、その設定の正しい構文を説明しており、バッチファイルでも機能します。提供されている例を使用します。
curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api
コマンドラインの解析に使用されるライブラリに依存するエスケープ文字を処理する必要を回避するためのよりクリーンな代替方法は、標準のjson形式のテキストを別のファイルに保存することです。
curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api
データ内の引用符を保持するには、次のように二重にエスケープしてみてください(\\ "")。
curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"