2013-08-02 12 views
8

के माध्यम से पूछताछ एपीआई मैं Parse.com आरईएसटी एपीआई देख रहा हूं और कर्ल रैपर PHP उपयोगों का उपयोग करके कॉल कर रहा हूं।कर्ल/PHP

कच्चे कर्ल कोड (काम):

curl -X GET \ 
    -H "X-Parse-Application-Id: myApplicationID" \ 
    -H "X-Parse-REST-API-Key: myRestAPIKey" \ 
    https://api.parse.com/1/classes/Steps 

PHP कोड (काम):

$ch = curl_init('https://api.parse.com/1/classes/Steps'); 

curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Parse-Application-Id: myApplicationID', 
    'X-Parse-REST-API-Key: myRestAPIKey', 
    'Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_exec($ch); 
curl_close($ch); 

यही अच्छा है और dandy, लेकिन अब जब मैं एक क्वेरी अवरोध जोड़ने की कोशिश:

कच्चे कर्ल कोड (काम करता है):

curl -X GET \ 
    -H "X-Parse-Application-Id: myApplicationID" \ 
    -H "X-Parse-REST-API-Key: myRestAPIKey" \ 
    -G \ 
--data-urlencode 'where={"steps":9243}' \ 
https://api.parse.com/1/classes/Steps 

हां, हम अंत में मेरे प्रश्न पर पहुंचे- उपर्युक्त कोड के लिए PHP एनालॉग क्या है?

PHP कोड (काम नहीं करता है):

$ch = curl_init('https://api.parse.com/1/classes/Steps'); 

$query = urlencode('where={"steps":9243}'); 

curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Parse-Application-Id: myApplicationID', 
    'X-Parse-REST-API-Key: myRestAPIKey', 
    'Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 

curl_exec($ch); 
curl_close($ch); 

त्रुटि प्रतिक्रिया:

Object ([code] => 107 [error] => invalid json: where%3D%7B%22steps%22%3A9243%7D) 

उत्तर

12

आपकी आखिरी पीएचपी उदाहरण किसी GET से एक पोस्ट करने के लिए अनुरोध बदल गया है। पोस्ट बॉडी के बजाय क्वेरी स्ट्रिंग में अपने पैरामीटर पास करें। प्रयास करें:

$query = urlencode('where={"steps":9243}'); 
$ch = curl_init('https://api.parse.com/1/classes/Steps?'.$query); 

curl_setopt(
    $ch, 
    CURLOPT_HTTPHEADER, 
    array(
     'X-Parse-Application-Id: myApplicationID', 
     'X-Parse-REST-API-Key: myRestAPIKey', 
     'Content-Type: application/json' 
    ) 
); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_exec($ch); 
curl_close($ch); 
+0

सुंदर, धन्यवाद! मैं कर्ल लाइन --डाटा-urlencode के साथ उलझन में था (जो दस्तावेज कहता है कि यह डेटा पोस्ट करने के लिए प्रयोग किया जाता है)। लेकिन क्वेरी के साथ यूआरएल जोड़ने के लिए यह समझ में आता है। –

+0

यह --डाटा परम के बारे में सही है, लेकिन -जी परम इसे वापस प्राप्त करने के लिए मजबूर करता है। –

0

यह पंक्ति:

curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 

एक अनुरोध शरीर है, जो एक GET अनुरोध के लिए मान्य नहीं है स्थापित करने के लिए कोशिश कर रहा है। कर्ल आपको एक जीईटी अनुरोध (example) पर एक शरीर सेट करने देता है। ।

$fields = array(
    'where' => urlencode('{"steps":9243}') 
); 

curl_setopt($ch, CURLOPT_POST, count($fields)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
:

ऐसा लगता है कि अपने PHP की तरह एक पोस्ट अनुरोध बनाने नहीं है (कम से कम सबसे अच्छा मैं अन्य पीएचपी उदाहरण है कि curl_setopt($ch,CURLOPT_POST, count($fields)); का उपयोग को देख से बता सकते हैं मैं तुम्हें postfields विकल्प के लिए एक सरणी में उत्तीर्ण होना मानना ​​है कि

+0

बेकार प्लग: यदि आप रनस्कोप यूआरएल का उपयोग करते हैं तो आप HTTP अनुरोध/प्रतिक्रिया को आगे और आगे देख सकते हैं कि आपका कोड उत्पन्न हो रहा है। –

0

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

$query = json_encode(
    array(
     'where' => array('steps' => 9243) 
    ) 
); 

मैं here से gleaned है - हालांकि अजगर उदाहरण JSON एन्कोड करने के लिए भेजने से पहले क्वेरी प्रकट होता है परीक्षण नहीं किया, तो यह है कि कोशिश कर रहा लायक हो सकता है!।

0

प्राप्त कॉल करने के लिए, पोस्ट, हटाएँ, अनुरोध के सभी प्रकार डाल, मैं बनाया है एक आम समारोह

define("SITEURL", "http://localhost:82/slimdemo/RESTAPI"); 

function CallAPI($method, $api, $data, $headers) { 
    $url = SITEURL . "/" . $api; 
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 

    switch ($method) { 
     case "GET": 
      curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); 
      break; 
     case "POST": 
      curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 
      break; 
     case "PUT": 
      curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); 
      break; 
     case "DELETE": 
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 
      break; 
    } 
    $response = curl_exec($curl); 
    $data = json_decode($response); 

    /* Check for 404 (file not found). */ 
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
    // Check the HTTP Status code 
    switch ($httpCode) { 
     case 200: 
      $error_status = "200: Success"; 
      return ($data); 
      break; 
     case 404: 
      $error_status = "404: API Not found"; 
      break; 
     case 500: 
      $error_status = "500: servers replied with an error."; 
      break; 
     case 502: 
      $error_status = "502: servers may be down or being upgraded. Hopefully they'll be OK soon!"; 
      break; 
     case 503: 
      $error_status = "503: service unavailable. Hopefully they'll be OK soon!"; 
      break; 
     default: 
      $error_status = "Undocumented error: " . $httpCode . " : " . curl_error($curl); 
      break; 
    } 
    curl_close($curl); 
    echo $error_status; 
    die; 
} 

कॉल DeleteAPI

$data = array('id'=>$_GET['did']); 
$header = array('USERTOKEN:' . GenerateToken()); 
$result = CallAPI('DELETE', "DeleteCategory", $data, $header); 

कॉल PostAPI

$data = array('title'=>$_POST['txtcategory'],'description'=>$_POST['txtdesc']); 
$header = array('USERTOKEN:' . GenerateToken()); 
$result = CallAPI('POST', "InsertCategory", $data, $header); 

कॉल GetAPI

$data = array('id'=>$_GET['eid']); 
$header = array('USERTOKEN:' . GenerateToken()); 
$result = CallAPI('GET', "GetCategoryById", $data, $header); 

कॉल PutAPI

$data = array('id'=>$_REQUEST['eid'],m'title'=>$_REQUEST['txtcategory'],'description'=>$_REQUEST['txtdesc']); 
$header = array('USERTOKEN:' . GenerateToken()); 
$result = CallAPI('POST', "UpdateCategory", $data, $header);