2015-11-10 9 views
6
var req ={ 
     "request": { 
     "header": { 
      "username": "name", 
      "password": "password" 
     }, 
     "body": { 
     "shape":"round"  
    } 
     } 
    }; 

    request.post(
     {url:'posturl', 

     body: JSON.stringify(req), 
     headers: { "content-type": "application/x-www-form-urlencoded"} 
     }, 
     function (error, response, body) {   
      if (!error && response.statusCode == 200) { 
       console.log(body) 
      } 
     } 
    ); 

मैं रिक रिक्तर में कच्चे अनुरोध निकाय भेजना चाहता हूं। यह डाकिया पर काम कर रहा है लेकिन नोड जेएस में मैं कच्चे जेसन को पोस्ट अनुरोध के लिए अनुरोध निकाय के रूप में भेजने में सक्षम नहीं हूं।नोड जेएस कच्चे अनुरोध निकाय के साथ पोस्ट अनुरोध भेजें

+0

त्रुटि क्या है? क्या आपका 'सामग्री-प्रकार ":" एप्लिकेशन/एक्स-www-form-urlencoded "गलत हो सकता है, क्योंकि आप JSON भेज रहे हैं? यह 'आवेदन/जेसन' होना चाहिए। –

+0

पोस्ट /HTTP/JSON/Prices/GetPriceSheet.aspx HTTP/1.1 मेजबान: host.com सामग्री प्रकार: आवेदन/x-www फार्म-urlencoded कैश-नियंत्रण: नहीं कैश { "अनुरोध": {"हेडर": {"उपयोगकर्ता नाम": "नाम", "पासवर्ड": "पीडब्ल्यू"}, "बॉडी": {"आकार": "राउंड"}}} यह अनुरोध पूर्वावलोकन है जो डाकिया पर काम कर रहा है। तो मुझे हेडर में एक्स-www-form-urlencoded की आवश्यकता है लेकिन कच्चे जेसन डेटा भी भेजें। मुझे जो त्रुटि मिल रही है वह बाकी सेवा से गलत प्रारूप है। –

उत्तर

2

Content-Typeapplication/json बदलें, क्योंकि आपका शरीर JSON प्रारूप में है।

+0

ने कोशिश की लेकिन "सामग्री-प्रकार": "एप्लिकेशन/एक्स-www-form-urlencoded" हेडर के लिए भी एक आवश्यकता है। –

+0

फिर आपको अपने शरीर को उस प्रारूप में बदलने के लिए बदलना है, जेएसओएन में नहीं। –

+0

हां मुझे लगता है कि समस्या है मुझे जेसन की आवश्यकता नहीं है लेकिन सामग्री प्रकार के अनुसार क्वेरी स्ट्रिंग में डेटा। मैं एक्स-www-फॉर्म के प्रारूप को समझने की कोशिश करूंगा। धन्यवाद। –

5

आप JSON (आपका req चर) भेजने की कोशिश कर रहे हैं लेकिन आप इसे स्ट्रिंग (JSON.stringify(req)) के रूप में पार्स कर रहे हैं। चूंकि आपका मार्ग JSON की अपेक्षा कर रहा है, यह शायद असफल हो जाएगा और एक त्रुटि लौटाएगा। नीचे दिए गए अनुरोध का प्रयास करें:

request.post({ 
    url: 'posturl', 
    body: req, 
    json: true 
}, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body) 
    } 
}); 

इसके बजाय अपने हेडर स्थापित करने की, तो आप सिर्फ विकल्प json: true अगर आप JSON भेज रहे हैं जोड़ सकते हैं।

0

शरीर में जोड़े गए स्ट्रिंग के लिए शीर्षलेख में 'सामग्री-लंबाई' जोड़ना, इस समस्या को हल करेगा। यह मेरे लिए काम किया।

हेडर: { "कैश-नियंत्रण": "नहीं-कैश", "सामग्री प्रकार": "आवेदन/json; charset = UTF-8", 'सामग्री-लंबाई': req.length}

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