Php का उपयोग करके json पोस्ट भेजें


85

मेरे पास यह डेटा है:

{ 
    userID: 'a7664093-502e-4d2b-bf30-25a2b26d6021',
    itemKind: 0,
    value: 1,
    description: 'Saude',
    itemID: '03e76d0a-8bab-11e0-8250-000c29b481aa'
}

और मुझे json url में पोस्ट करने की आवश्यकता है: http: // domain / OnLeagueRest / Resources / onleague / Account / CreditAccount

php का उपयोग करके मैं इस पोस्ट अनुरोध को कैसे भेज सकता हूं?


2
कुछ और विवरण या कोड दें
jimy

मुझे केवल userID, itemKind, value, description और itemID के साथ json पोस्ट भेजने की आवश्यकता है
कार्लोस मार्टिंस

@Gumbo Chrome आपसे असहमत है;)
Phil

3
@Phil: JSON है नहीं जावास्क्रिप्ट या ठीक इसके विपरीत। Chrome उस कोड को स्वीकार कर सकता है क्योंकि उसमें जावास्क्रिप्ट दुभाषिया है। लेकिन अगर आप JSON.parseउस कोड को पार्स करने के लिए उपयोग करते हैं, तो यह निश्चित रूप से विफल हो जाएगा।
गुम्बो

@ Gumbo अतिरिक्त जानकारी के लिए धन्यवाद। क्या समस्या निर्विवाद कुंजी है?
फिल

जवाबों:


119

किसी भी बाहरी निर्भरता या पुस्तकालय का उपयोग किए बिना :

$options = array(
  'http' => array(
    'method'  => 'POST',
    'content' => json_encode( $data ),
    'header'=>  "Content-Type: application/json\r\n" .
                "Accept: application/json\r\n"
    )
);

$context  = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );
$response = json_decode( $result );

$ प्रतिक्रिया एक वस्तु है। संपत्तियों को हमेशा की तरह एक्सेस किया जा सकता है, जैसे $ प्रतिक्रिया -> ...

जहाँ $ डेटा आपके डेटा को समेटने वाला सरणी है:

$data = array(
  'userID'      => 'a7664093-502e-4d2b-bf30-25a2b26d6021',
  'itemKind'    => 0,
  'value'       => 1,
  'description' => 'Boa saudaÁ„o.',
  'itemID'      => '03e76d0a-8bab-11e0-8250-000c29b481aa'
);

चेतावनी : यह काम नहीं करेगा अगर allow_url_fopen सेटिंग को php.ini में बंद कर दिया जाए।

यदि आप वर्डप्रेस के लिए विकसित कर रहे हैं , तो दिए गए API का उपयोग करने पर विचार करें : https://developer.wordpress.org/plugins/http-apn/


1
मुझे पता है कि मुझे कई साल हो गए हैं, लेकिन क्या इस पद्धति के साथ प्रतिक्रिया हेडर प्राप्त करना संभव है?
सलारशादो

3
बहुत बढ़िया, बिना किसी एक्सटेंशन के ऐसा करने का उल्लेख करने के लिए धन्यवाद!
joonas.fi

एक्सटेंशन के बिना हमेशा स्वागत है। मुझे नहीं पता था कि WP में इसके लिए एक मानकीकृत एपीआई था। जानकारी के उस बिट के लिए अतिरिक्त धन्यवाद!
वेदरन Novego

2
@ स्कॉलशेडो रॉ रिस्पॉन्स हेडर स्ट्रीम_get_meta_data के साथ प्राप्त किया जा सकता है ।
डेनियल 118

1
एक छोटा सुधार सुझाव, आप हेडर को एक सरणी में भी रख सकते हैं, खासकर यदि अधिक हेडर जैसे कि प्राधिकरण को जोड़ना होगा। उस स्थिति में, "\ r \ n" नहीं जोड़ा जाना चाहिए ।
शून्य 05

136

आप इस उद्देश्य के लिए CURL का उपयोग कर सकते हैं उदाहरण कोड देखें:

$url = "your url";    
$content = json_encode("your data to be sent");

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
        array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);

$json_response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ( $status != 201 ) {
    die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}


curl_close($curl);

$response = json_decode($json_response, true);

1
मेरे पास JSON की तुलना में कुछ अधिक मूल्य हैं - हाँ, मेरे पास JSON का मूल्य भी है .. अब मैं कैसे करूँ? मेरे पास पोस्ट करने के लिए कुल तीन मान हैं: शीर्षक = somevalue & hash = somevalue & json = JSON VALUE। अब यह php का उपयोग कैसे करें?
प्रकाश

1
यह मेरी स्थिति में काम नहीं किया ( stackoverflow.com/questions/34021817/… )। मेरे नोडज को {} प्राप्त हुआ। कोई विचार है क्यों?
फेन डे

यदि आप इसे और मूल file_get_contentsविधि को बेंचमार्क करते हैं, तो वे ठीक उसी गति के बारे में हैं
ब्रायन लीशमैन


@ लाइट - $content = http_build_query( array( 'key1' => 'value1', 'key2' => 'value2', 'json' => json_encode($array_to_become_json) ) );जहां आप पहले से शिकार कर चुके हैं $array_to_become_json = array(...)
टूलमेकरसेव

0

CURL ल्यूक का उपयोग करें :) गंभीरता से, इसे करने के सर्वोत्तम तरीकों में से एक है और आपको प्रतिक्रिया मिलती है।


10
कर्ल हमेशा सक्षम नहीं होता है ... कभी-कभी आपको इसे पुराने फैशन के तरीके से करने की आवश्यकता होती है ...
बेंजामिन एकस्टीन

0

उस फ़ाइल से सावधान रहें जो file_get_contents समाधान कनेक्शन को बंद नहीं करता है क्योंकि जब सर्वर वापस आता है तो कनेक्शन: HTTP हेडर में बंद करें

दूसरी ओर, CURL समाधान, कनेक्शन को समाप्त कर देता है ताकि PHP स्क्रिप्ट प्रतिक्रिया के इंतजार में अवरुद्ध न हो।


महान अवलोकन
nensamuel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.