2012-08-06 7 views
45

मेरी समस्या: मेरे POST अनुरोध के साथ कुछ डेटा भेजते समय मेरे स्थानीयहोस्ट सर्वर को कर्ल करने के लिए कमांड लाइन टूल का उपयोग करना काम नहीं कर रहा है।विन्डोज़ रिकस्ट सर्विस पर कर्ल पोस्ट कमांड लाइन

क्या त्रुटि पैदा किया जा रहा है: लौटने डेटा के इस

  1. 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 

के बाद कुछ खोज मैं पता लगा यह समस्या टी के लिए इस्तेमाल सिंटैक्स नहीं हो सका वह अनुरोध करता है क्योंकि यह यूनिक्स शैल पर काम करता है।

Are you possibly using Windows? That so looks like a completely broken shell that doesn't properly deal with single-quotes vs double-quotes. I just tried that command line and it worked fine on my linux box. 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

काम नहीं किया तो मैं छोड़ दिया। विंडोज पोस्ट पर भेजा JSON ऑब्जेक्ट के साथ खिलवाड़ करने लगता है

+0

कृपया अपने प्रश्न शीर्षक में '[हल]] जोड़ें। अगर आपने अपने प्रश्न का उत्तर निकाला है, तो आपको इसे उत्तर के रूप में पोस्ट करना चाहिए। –

+1

चेतावनी @ कोडीग्रे के लिए धन्यवाद। मैं अपनी पोस्ट को सही कर दूंगा। – Lothre1

+1

यदि आपके पास अपनी मशीन पर गिट स्थापित है, तो आप कर्ल के लिए गिट बैश का उपयोग कर सकते हैं। यह बहुत सारे सिरदर्द बचाता है। –

उत्तर

83

मैं अपने Win7 x64 लैपटॉप पर एक ही मुद्दे में भाग गया और यह कर्ल रिलीज कि बहुत समान कमांड लाइन प्रारूप का उपयोग करके Win64 - Generic w SSL लेबल किया गया है का उपयोग कर काम कर पाने में सक्षम था:

C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}" 

कौन सा केवल अलग है भागने वाले लोगों और हेडर पैरामीटर मान के चारों ओर डबल-कोट्स का उपयोग करके अपने दूसरे भागने संस्करण से। निश्चित रूप से लिनक्स खोल वाक्यविन्यास अधिक पसंद करते हैं।

13

वैकल्पिक समाधान: कमांड लाइन की तुलना में अधिक उपयोगकर्ता के अनुकूल समाधान:

If you are looking for a user friendly way to send and request data using HTTP Methods other than simple GET's probably you are looking for a chrome extention just like this one http://goo.gl/rVW22f called AVANCED REST CLIENT

मैं cygwin की सिफारिश कमांड लाइन के साथ रहने के लिए देख लोगों के लिए :

I ended up installing cygwin with CURL which allow us to Get that Linux feeling - on Windows!

Using Cygwin command line this issues have stopped and most important, the request syntax used on 1. worked fine.

उपयोगी लिंक्स:

Where i was downloading the curl for windows command line?

For more information on how to install and get curl working with cygwin just go here

मुझे आशा है कि यह किसी की मदद करे क्योंकि मैंने इस पर पूरी सुबह बिताई थी।

+0

यह स्वीकार्य उत्तर नहीं होना चाहिए। ओपी ने वेब आधारित आरईएसटी क्लाइंट या वैकल्पिक कमांड लाइन क्लाइंट के लिए सिफारिशों के लिए नहीं पूछा था। उन्होंने कर्ल के लिए भागने से बचने में मदद की मांग की, जिसे उपयोगकर्ता 1683523 द्वारा उत्तर दिया गया था। –

+0

लेकिन यह उन लोगों के लिए बेहतर जवाब है जो उस प्रश्न पूछ रहे हैं। – RickAndMSFT

35

उद्धरण चिह्नों के साथ लड़ने से आसान कमांड लाइन के लिए एक और विकल्प जेसन को एक फ़ाइल में रखना है, और कर्ल पैरामीटर के @ उपसर्ग का उपयोग करना है, उदा। जेसन में निम्नलिखित के साथ।txt:

{ "syncheader" : { 
    "servertimesync" : "20131126121749", 
    "deviceid" : "testDevice" 
    } 
} 

तो मेरे मामले में मैं जारी करते हैं:

curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt 

json अधिक भी पठनीय रखता है। डबल कोट्स (") का उपयोग

+0

आप एक जीवन बचतकर्ता हैं! –

+0

यह एक काम किया, thx! – kukudas

+0

ओह मीठे रोनाल्ड मैकडोनाल्ड आपको धन्यवाद –

0
  1. की कोशिश करने के बजाय एकल लोगों (')।
  2. JSON प्रारूप उद्धरण की रक्षा के लिए, उन्हें दोहरीकरण की कोशिश (" ")।
  3. डेटा के अंदर उद्धरण संरक्षित करने के लिए कोशिश करने के लिए उन्हें इस तरह डबल बच (\\ "")।

    curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}" 
    curl ... -d "{""data"": ""data \\""abc\\"" goes here""}" 
    
2

कम से कम विंडोज द्विआधारी संस्करण मैं परीक्षण किया है, (Generic Win64 no-SSL binary, वर्तमान में 7.33.0 के आधार पर) के लिए , आप सीमा रेखा तर्कों को पार्स किए जा रहे हैं, इस सीमाओं के अधीन हैं। क्रिसमस का जवाब उस सेटिंग में सही वाक्यविन्यास का वर्णन करता है, जो बैच फ़ाइल में भी काम करता है। प्रदान की उदाहरण का उपयोग:

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 
+1

धन्यवाद। यह महत्वपूर्ण होने के लिए उपयोग नहीं किया गया था, लेकिन अब विंडोज 10 या मेरे स्थापित कर्ल संस्करण के साथ, मुझे अब अपने जेसन फ़ाइल तर्क के चारों ओर उद्धरण देना होगा-या फिर लाइन के अंत में इसे गड़बड़ कर दिया जाएगा। – joezen777

संबंधित मुद्दे