कर्ल के लिए JSON फ़ाइल के माध्यम से पेलोड कैसे पास करें?


201

मैं curlनिम्नलिखित कमांड निष्पादित करके सफलतापूर्वक एक स्थान बना सकता हूं :

$ curl -vX POST https://server/api/v1/places.json -d "
  auth_token=B8dsbz4HExMskqUa6Qhn& \
  place[name]=Fuelstation Central& \
  place[city]=Grossbeeren& \
  place[address]=Buschweg 1& \
  place[latitude]=52.3601& \
  place[longitude]=13.3332& \
  place[washing]=true& \
  place[founded_at_year]=2000& \
  place[products][]=diesel& \
  place[products][]=benzin \
"

सर्वर लौटता है HTTP/1.1 201 Created
अब मैं एक JSON फ़ाइल में पेलोड को स्टोर करना चाहता हूं जो इस तरह दिखता है:

// testplace.json
{
  "auth_token" : "B8dsbz4HExMskqUa6Qhn",
  "name" : "Fuelstation Central",
  "city" : "Grossbeeren",
  "address" : "Buschweg 1",
  "latitude" : 52.3601,
  "longitude" : 13.3332,
  "washing" : true,
  "founded_at_year" : 2000,
  "products" : ["diesel","benzin"]
}

इसलिए मैं इस तरह निष्पादित होने की आज्ञा को संशोधित करता हूं:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json

यह लौटने में विफल रहता है HTTP/1.1 401 Unauthorized। क्यों?


1
यह भी ध्यान रखें कि यदि आप बाइनरी फ़ाइलों को अपलोड कर रहे हैं, तो आपको उपयोग करना चाहिए --data-binary
अहमेट - ०

जवाबों:


329

curlडिफ़ॉल्ट सामग्री प्रकार के साथ POST अनुरोध भेजता है application/x-www-form-urlencoded। यदि आप JSON अनुरोध भेजना चाहते हैं, तो आपको सही सामग्री प्रकार हेडर निर्दिष्ट करना होगा:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

लेकिन यह तभी काम करेगा जब सर्वर json इनपुट स्वीकार करेगा। .jsonयूआरएल के अंत में ही संकेत हो सकता है कि उत्पादन json है, यह जरूरी नहीं है कि यह भी json संभाल लेंगे इनपुट । एपीआई प्रलेखन आपको यह संकेत देता है कि यह करता है या नहीं।

आपके द्वारा कोई 401और त्रुटि न करने का कारण शायद यह है क्योंकि सर्वर auth_tokenआपके अनुरोध से नहीं निकाल सकता है ।


8
मैं उपयोग करने के लिए कोशिश कर रहा था cat file.jsonके बाद -dऔर इसके साथ परेशानी हो रही किया गया था, जब तक मैं इस जवाब है कि मैं उपयोग कर सकते हैं से सीखा @file.json। धन्यवाद :)
shadi

1
ध्यान दें कि यदि आप कई हेडर की जरूरत है आप निर्दिष्ट करने की आवश्यकता -H/ --headerजब Ubuntu पर बैश में परीक्षण किया गया कम से कम एक से अधिक बार,।
बजे चैम एलियाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.