दिलचस्प पोस्ट
दृश्य स्टूडियो के साथ स्टैक स्पेस निर्धारित करना बाइट + बाइट = इंट … क्यों? क्रोम डेवलपर टूल में == $ 0 (डबल बराबर डॉलर शून्य) क्या होता है? NSString उदाहरण NSCFString के रूप में अपनी कक्षा की रिपोर्ट करता है सी # में "वापसी की प्रतीक्षा" का उद्देश्य क्या है? एक्सप्लोरर को .NET एप्लिकेशन से ड्रॉप खींचें IE8 सीएसएस @ फॉन्ट-फोंट फोंट केवल इसके लिए काम कर रहे हैं: रिफ्रेश / हार्ड रिफ्रेश पर सामग्री से पहले और कभी-कभी पता करें कि रेडियो बटन JQuery के साथ चेक किया गया है या नहीं? स्मृति-मैप किए गए फ़ाइलों के फायदे क्या हैं? getActionBar शून्य प्रदान करता है क्यों नहीं enum के निर्माता स्थिर क्षेत्रों का उपयोग कर सकते हैं? किसी दृश्य रीफ्रेश को बिना किसी बलपूर्वक ट्रिगर होने के बावजूद कैसे मजबूती? जावा (जेएनए) से डीएलएल का उपयोग करने की कोशिश कर रहा है लाइब्रेरी अपवाद को लोड करने में असमर्थ जावा – दो स्ट्रिंग के बीच सभी स्ट्रिंग्स को पकड़ने का सबसे अच्छा तरीका है? (regex?) एंड्रॉइड पर एक इरादे के माध्यम से Google मानचित्र दिशाएं लॉन्च करना

PHP कर्ल के साथ JSON डेटा पोस्ट करने के लिए कैसे?

यहाँ मेरा कोड है,

$url = 'url_to_post'; $data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) ); $data_string = json_encode($data); $ch=curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string)); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($ch); curl_close($ch); 

और दूसरे पृष्ठ पर, मैं पोस्ट डेटा पुनर्प्राप्त कर रहा हूं

  print_r ($_POST); 

आउटपुट है

 HTTP/1.1 200 OK Date: Mon, 18 Jun 2012 07:58:11 GMT Server: Apache X-Powered-By: PHP/5.3.6 Vary: Accept-Encoding Connection: close Content-Type: text/html Array ( ) 

इसलिए, मुझे अपने स्वयं के सर्वर पर भी उचित डेटा नहीं मिल रहा है, यह खाली सरणी है मैं http://docs.shopify.com/api/customer#create पर json का उपयोग करके बाकी को लागू करना चाहता हूं

Solutions Collecting From Web of "PHP कर्ल के साथ JSON डेटा पोस्ट करने के लिए कैसे?"

आप जेसन को गलत तरीके से पोस्ट कर रहे हैं – लेकिन भले ही यह सही हो, आप प्रिंट_अ print_r($_POST) का उपयोग करके परीक्षण नहीं कर पाएंगे print_r($_POST) यहां क्यों पढ़ें )। इसके बजाय, अपने दूसरे पृष्ठ पर, आप इन फाइलिंग के लिए आने वाले अनुरोध को पकड़ कर फ़ाइल_गेट_contents file_get_contents("php://input") का उपयोग कर सकते हैं , जिसमें पोस्टेड जेएसएन शामिल होगा । प्राप्त किए गए आंकड़ों को अधिक पठनीय स्वरूप में देखने के लिए, यह कोशिश करें:

 echo '<pre>'.print_r(json_decode(file_get_contents("php://input")),1).'</pre>'; 

आपके कोड में, आप Content-Type:application/json को इंगित कर रहे हैं, लेकिन आप जेएसएनएन-एन्कोडिंग सभी POST डेटा नहीं हैं – केवल "ग्राहक" पोस्ट फ़ील्ड का मान। इसके बजाय, ऐसा कुछ करें:

 $ch = curl_init( $url ); # Setup request to send json via POST. $payload = json_encode( array( "customer"=> $data ) ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); # Return response instead of printing. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); # Send request. $result = curl_exec($ch); curl_close($ch); # Print response. echo "<pre>$result</pre>"; 

सिडेनोटः शॉपिविटी एपीआई के साथ सीधे इंटरफेसिंग के बजाय आपको एक तृतीय-पक्ष लाइब्रेरी का उपयोग करने से फायदा हो सकता है।

बदलने के

 curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string)); 

साथ में:

 $data_string = json_encode(array("customer"=>$data)); //Send blindly the json-encoded string. //The server, IMO, expects the body of the HTTP request to be in JSON curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 

मैं "दूसरे पृष्ठ" से क्या मतलब है, मुझे नहीं मिलता, मुझे उम्मीद है कि यह पृष्ठ है: 'url_to_post' अगर उस पृष्ठ को PHP में लिखा गया है, तो आप ऊपर पोस्ट किए गए जेएसओएन को नीचे दिए गए तरीके से पढ़ा जाएगा:

 $jsonStr = file_get_contents("php://input"); //read the HTTP body. $json = json_decode($jsonStr); 

इस उदाहरण की कोशिश करो

 <?php $url = 'http://localhost/test/page2.php'; $data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) ); $ch=curl_init($url); $data_string = urlencode(json_encode($data)); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string)); $result = curl_exec($ch); curl_close($ch); echo $result; ?> 

आपका पेज 2.php कोड

 <?php $datastring = $_POST['customer']; $data = json_decode( urldecode( $datastring)); ?> 

इस तरह से प्रयास करें:

 $url = 'url_to_post'; // this is only part of the data you need to sen $customer_data = array("first_name" => "First name","last_name" => "last name","email"=>"email@gmail.com","addresses" => array ("address1" => "some address" ,"city" => "city","country" => "CA", "first_name" => "Mother","last_name" => "Lastnameson","phone" => "555-1212", "province" => "ON", "zip" => "123 ABC" ) ); // As per your API, the customer data should be structured this way $data = array("customer" => $customer_data); // And then encoded as a json string $data_string = json_encode($data); $ch=curl_init($url); curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data_string, CURLOPT_HEADER => true, CURLOPT_HTTPHEADER => array('Content-Type:application/json', 'Content-Length: ' . strlen($data_string))) )); $result = curl_exec($ch); curl_close($ch); 

आपके द्वारा भूल गए महत्वपूर्ण चीज आपके डेटा को json_encode करने के लिए थी लेकिन आप किसी भी सरणी को पास करके एक बार में सभी कर्ल विकल्पों को सेट करने के लिए curl_setopt_array का उपयोग करने के लिए सुविधाजनक भी पा सकते हैं।