डाकिया के साथ कच्चे json के माध्यम से POST डेटा भेजें


107

मुझे पोस्टमैन मिल गया है (जो क्रोम में नहीं खुलता है) और मैं कच्चे json का उपयोग करके POST अनुरोध करने की कोशिश कर रहा हूं।

बॉडी टैब में मेरे पास "रॉ" है और इस बॉडी के साथ "JSON (एप्लिकेशन / json)" है:

{
    "foo": "bar"
}

हेडर के लिए मेरे पास 1 है, Content-Type: application/json

PHP की तरफ मैं अभी के लिए कर print_r($_POST);रहा हूँ, और मुझे एक खाली सरणी मिल रही है।


अगर मैं jQuery का उपयोग करता हूं और करता हूं:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

मुझे उम्मीद है:

Array
(
    [foo] => bar
)

तो क्यों यह डाकिया के साथ काम नहीं कर रहा है?


पोस्टमैन स्क्रीनशॉट:

यहां छवि विवरण दर्ज करें

और हैडर:

यहां छवि विवरण दर्ज करें


$ _REQUEST बजाय $ _POST और var_dump () के बजाय Print_r ()
दीप

@ मुझे array(1) {["foo"]=> string(3) "bar"}jQuery के साथ मिलता है और अभी भी डाकिया के साथ एक खाली सरणी है:array(0) {}
डलास

इसलिए पोस्टमैन अनुरोध नहीं भेज रहा
दीप

@ smerny अपनी पोस्ट में fieldsऔर fooइस तरह मैच नहीं होगा, मुझे यकीन नहीं है कि अगर यह एक टाइपो है, लेकिन सुनिश्चित करें कि वे मैच
मेड

@meda, सही था जो एक टाइपो था, लेकिन अगर मेरे पास फ़ील्ड्स होते तो भी $ _REQUEST या $ _POST के var डंप में आउटपुट होना चाहिए
डलास

जवाबों:


38

jQueryकच्चे को पढ़ने के लिए इसके विपरीत , JSONआपको इसे PHP में डिकोड करना होगा।

print_r(json_decode(file_get_contents("php://input"), true));

php://input एक रीड-ओनली स्ट्रीम है जो आपको अनुरोध बॉडी के कच्चे डेटा को पढ़ने की अनुमति देता है।

$_POSTरूप चर है, तो आपको उपयोग करने के लिए formरेडियोडॉटन पर स्विच करना होगा postman:

foo=bar&foo2=bar2

के jsonसाथ कच्चे पोस्ट करने के लिए jquery:

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});

हां एक्सक्लुसिव पोस्टिंग जोंस बनाम पोस्ट वेरिएबल अलग हैं
मेडा

43

बस बाइनरी के बगल में ड्रॉप डाउन से JSON विकल्प की जांच करें; जब आप कच्चे पर क्लिक करें। यह करना चाहिए

कौशल सिनॉन पास ज्सन पोस्टमैन के लिए


4
यह एक काफी पुरानी पोस्ट है .. लेकिन यदि आप इस प्रश्न को देखेंगे तो आप देखेंगे कि मैंने ठीक वैसा ही किया है। आप समस्या, समाधान को बेहतर ढंग से समझने के लिए प्रश्न, चयनित उत्तर और चयनित उत्तर पर टिप्पणियों को पढ़ना चाह सकते हैं।
डलास

1
ज़रूर, लेकिन यह वास्तव में मेरे पास इस मुद्दे को इंगित करता था; मुझे "टेक्स्ट" चुना गया था, न कि एप्लिकेशन / जोंस, भले ही हेडर्स सेक्शन में पहले ही उल्लेख किया गया हो। यह भ्रमित करने वाला है; यदि आप "पाठ" चुनते हैं, तो संपूर्ण HTTP POST "कोड" प्रदर्शित किया जाता है, जिसमें JSON भी शामिल है, जिसे मैंने काम करने की उम्मीद की थी, क्योंकि इसके पूर्ण POST कॉल के बाद, केवल json ही नहीं।
टेड

7

मेडा का जवाब पूरी तरह से वैध है, लेकिन जब मैंने कोड कॉपी किया तो मुझे एक त्रुटि मिली!

कहीं "php://input"एक अमान्य चरित्र (शायद उद्धरण में से एक है?)।

जब मैंने "php://input"मैन्युअल रूप से कोड टाइप किया, तो यह काम कर गया। मुझे पता लगाने के लिए कुछ समय लिया!


1
खुशी है कि मैं थोड़ा और नीचे स्क्रॉल किया और यह देखा - मैं एक ही मुद्दा रहा था। अच्छा खोजो!
चार्ली स्टेनार्ड

2
ऐसा लगता है कि किसी ने इसे मेडा के पोस्ट में संपादित किया है। लेकिन मैंने संपादन इतिहास को देखा और पाया कि मूल पोस्ट 200c 200bमें "n" और "p" के बीच "इनपुट" था। निश्चित नहीं है कि वह कैसे समाप्त हुआ, लेकिन अब यह तय हो गया है।
डलास

6

मैं एक ही समस्या का सामना कर रहा था, निम्नलिखित कोड ने मेरे लिए काम किया:

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);


1

पोस्टमैन मूल एप्लिकेशन इंस्टॉल करें, Chrome एक्सटेंशन को हटा दिया गया है। (मेरा खुद की विंडो में खुल रहा था लेकिन फिर भी क्रोम ऐप के रूप में चला गया)


2
इस सवाल का जवाब नहीं है।
झपट्टा

@ झपट्ट वास्तव में यह करता है। मुझे भी यही समस्या थी। जब पोस्टमैन ऐप का इस्तेमाल किया गया, तो इसने काम किया। प्रश्न है: तो क्यों यह डाकिया के साथ काम नहीं कर रहा है?
जारोस्लाव ittreit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.