दिलचस्प पोस्ट
ऑक्सीजन की शुरुआत क्यों नहीं की जाएगी (पहली बार)? कोनालर 2 – एनजीफ़ोर नंबर का उपयोग करने के बजाय संग्रह C ++ कोड के लिए कॉलिंग ग्राफ़ उत्पन्न करें MongoDB डेटाबेस फ़ाइल आकार को कम करना mysql कॉलम के नामों के रूप में गतिशील पंक्ति मानों का चयन करें, मूल्य के रूप में एक अन्य स्तंभ जब नोडलिस्ट रहते हैं और कब यह स्थिर है? SQL सर्वर 2005 में पदानुक्रमित क्वेरीज़ SQL सर्वर के लिए कनेक्शन कभी कभी काम करता है डीबगिंग करते समय मैं क्लासएनोटलोडेड अपवाद के साथ कैसे व्यवहार करूं? एंड्रॉइड में यूआरएल के जरिये इमेजिव्यू लोड करना है? कैसे आईओएस संस्करण की जांच करने के लिए? जीजीप्लोट लाइन चार्ट में मल्टी-पंक्ति x- अक्ष लेबल क्या मैं सीएसएस में एक छवि की ऊंचाई को बदल सकता हूँ: पहले /: छद्म तत्वों के बाद? PHP सूची निर्देशिका में सभी फाइलें इन (बीकंडिशन == नल) और (नाल == बीकंडशन) के बीच अंतर क्या है?

PHP का उपयोग करते हुए JSON POST पढ़ना

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

मेरे पास एक बहुत ही सरल वेब सेवा है जिसे मैंने बनाया है जिसे पोस्ट वैल्यू लेने और JSON एन्कोडेड सरणी वापस करने की आवश्यकता है। जब तक मुझे बताया गया न हो कि मुझे आवेदन सामग्री / प्रकार / जेएसएन के साथ फ़ॉर्म डेटा पोस्ट करने की आवश्यकता होगी, जब तक कि यह सब ठीक काम किया। तब से मैं वेब सेवा से कोई भी मान नहीं लौटा सकता और निश्चित रूप से मैं उनके पोस्ट मानों को कैसे छान कर रहा हूं, इसके साथ कुछ करना है।

मूल रूप से अपने स्थानीय सेटअप में मैंने एक परीक्षण पृष्ठ बनाया है जो निम्नलिखित करता है –

$curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data)) ); curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); // Set the url path we want to call $result = curl_exec($curl); //see the results $json=json_decode($result,true); curl_close($curl); print_r($json); 

मुझे webservice पर (यह मैंने कुछ फ़ंक्शंस निकाला है) –

 <?php header('Content-type: application/json'); /* connect to the db */ $link = mysql_connect('localhost','root','root') or die('Cannot connect to the DB'); mysql_select_db('webservice',$link) or die('Cannot select the DB'); if(isset($_POST['action']) && $_POST['action'] == 'login') { $statusCode = array('statusCode'=>1, 'statusDescription'=>'Login Process - Fail'); $posts[] = array('status'=>$statusCode); header('Content-type: application/json'); echo json_encode($posts); /* disconnect from the db */ } @mysql_close($link); ?> 

असल में मुझे पता है कि यह $ _POST मूल्यों के कारण नहीं है, लेकिन मैं $ _POST की बजाय मुझे क्या डालनी पड़ता है। मैंने json_decode ($ _ POST), file_get_contents ("php: // input") और कई अन्य तरीकों की कोशिश की, लेकिन मैं थोड़ा सा में शूटिंग कर रहा था।

किसी भी तरह की सहायता का स्वागत किया जाएगा।

धन्यवाद, स्टीव

मदद के लिए धन्यवाद माइकल, यह एक निश्चित कदम आगे था, अब मुझे कम से कम एक प्रतिनिधि मिल गया है जब मैं पोस्ट गूंज करता हूं …. भले ही यह शून्य है

नवीनीकृत कर्ल –

  $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 

उस पृष्ठ पर अपडेट किया गया पीएचपी जिसे डेटा पर पोस्ट किया जाता है –

 $inputJSON = file_get_contents('php://input'); $input= json_decode( $inputJSON, TRUE ); //convert JSON into array print_r(json_encode($input)); 

जैसा कि मैंने कहा कम से कम मुझे अब एक प्रतिक्रिया दिखाई दे रही है, इससे पहले कि वह एक रिक्त पृष्ठ लौट रहा था

वेब के समाधान से एकत्रित समाधान "PHP का उपयोग करते हुए JSON POST पढ़ना"

आपके पास खाली $_POST यदि आपका वेब-सर्वर जेसन-प्रारूप में डेटा देखना चाहता है तो आपको कच्चे इनपुट को पढ़ना होगा और फिर इसे जेसन डिकोड के साथ पार्स करना होगा।

आपको ऐसा कुछ चाहिए:

 $json = file_get_contents('php://input'); $obj = json_decode($json); 

JSON – संचार के परीक्षण के लिए आपके पास गलत कोड भी है …

CURLOPT_POSTFIELDS आपके मापदंडों को application/x-www-form-urlencoded रूप में एन्कोड करने के लिए curl कहता है। आपको यहां JSON-string की आवश्यकता है।

अद्यतन करें

परीक्षण पृष्ठ के लिए आपका PHP कोड उस तरह होना चाहिए:

 $data_string = json_encode($data); $ch = curl_init('http://webservice.local/'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($ch); $result = json_decode($result); var_dump($result); 

इसके अलावा आपके वेब-सर्विस पेज पर आपको एक लाइन header('Content-type: application/json'); को हटा देना चाहिए header('Content-type: application/json'); । इसे केवल एक बार ही कहा जाना चाहिए

हैलो यह मेरी पुरानी परियोजना की एक स्निपेट है जो कुछ मुफ्त आईपी डाटाबेस सेवाओं से आईपी जानकारी पाने के लिए कर्ल का उपयोग करता है जो जेएसएएन प्रारूप में जवाब देते हैं। मुझे लगता है कि यह आपकी मदद कर सकता है

 $ip_srv = array("http://freegeoip.net/json/$this->ip","http://smart-ip.net/geoip-json/$this->ip"); getUserLocation($ip_srv); 

समारोह:

 function getUserLocation($services) { $ctx = stream_context_create(array('http' => array('timeout' => 15))); // 15 seconds timeout for ($i = 0; $i < count($services); $i++) { // Configuring curl options $options = array ( CURLOPT_RETURNTRANSFER => true, // return web page //CURLOPT_HEADER => false, // don't return headers CURLOPT_HTTPHEADER => array('Content-type: application/json'), CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle compressed CURLOPT_USERAGENT => "test", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 5, // timeout on connect CURLOPT_TIMEOUT => 5, // timeout on response CURLOPT_MAXREDIRS => 10 // stop after 10 redirects ); // Initializing curl $ch = curl_init($services[$i]); curl_setopt_array ( $ch, $options ); $content = curl_exec ( $ch ); $err = curl_errno ( $ch ); $errmsg = curl_error ( $ch ); $header = curl_getinfo ( $ch ); $httpCode = curl_getinfo ( $ch, CURLINFO_HTTP_CODE ); curl_close ( $ch ); //echo 'service: ' . $services[$i] . '</br>'; //echo 'err: '.$err.'</br>'; //echo 'errmsg: '.$errmsg.'</br>'; //echo 'httpCode: '.$httpCode.'</br>'; //print_r($header); //print_r(json_decode($content, true)); if ($err == 0 && $httpCode == 200 && $header['download_content_length'] > 0) { return json_decode($content, true); } } } 

आप अपने जेएसएन को एक पैरामीटर में रख सकते हैं और केवल हेडर में अपने जेसन डाल के बजाय इसे भेज सकते हैं:

 $post_string= 'json_param=' . json_encode($data); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS, $post_string); curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); // Set the url path we want to call //execute post $result = curl_exec($curl); //see the results $json=json_decode($result,true); curl_close($curl); print_r($json); 

सेवा की तरफ से आप अपनी जेसन स्ट्रिंग पैरामीटर के रूप में पा सकते हैं:

 $json_string = $_POST['json_param']; $obj = json_decode($json_string); 

तो आप अपना रूपांतरित डेटा ऑब्जेक्ट के रूप में उपयोग कर सकते हैं।