J'ai fait des recherches partout et ne peux pas comprendre cela.Décodage JSON après l'envoi en utilisant PHP cUrl
Je vous écris une demande de cURL de test pour tester mon service REST:
// initialize curl handler
$ch = curl_init();
$data = array(
"products" => array ("product1"=>"abc","product2"=>"pass"));
$data = json_encode($data);
$postArgs = 'order=new&data=' . $data;
// set curl options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs);
curl_setopt($ch, CURLOPT_URL, 'http://localhost/store/rest.php');
// execute curl
curl_exec($ch);
Cela fonctionne bien et la demande est acceptée par mon service et $ _POST est rempli selon les besoins, avec deux variables, l'ordre et les données . Les données ont l'objet JSON codé. Et quand j'imprimer $ _POST [ « data »] il montre.
{"products":{"product1":"abc","product2":"pass"}}
Ce qui est exactement ce qui est attendu et identique à ce qui a été envoyé dans
Lorsque je tente de décoder, json_decode() ne retourne rien!
Si je crée une nouvelle chaîne et tapez manuellement cette chaîne, json_decode() fonctionne bien!
J'ai essayé:
strip_tags() pour supprimer toutes les balises qui auraient pu être ajoutés dans le poste http utf8_encode() pour encoder la chaîne aux utf requis 8 addslashes() pour ajouter des barres obliques avant les guillemets
Rien ne fonctionne.
Des idées pour lesquelles json_decode() ne fonctionne pas après la réception d'une chaîne à partir d'un message http?
Voici la partie pertinente de mon traitement de la demande de référence:
public static function processRequest($requestArrays) {
// get our verb
$request_method = strtolower($requestArrays->server['REQUEST_METHOD']);
$return_obj = new RestRequest();
// we'll store our data here
$data = array();
switch ($request_method) {
case 'post':
$data = $requestArrays->post;
break;
}
// store the method
$return_obj->setMethod($request_method);
// set the raw data, so we can access it if needed (there may be
// other pieces to your requests)
$return_obj->setRequestVars($data);
if (isset($data['data'])) {
// translate the JSON to an Object for use however you want
//$decoded = json_decode(addslashes(utf8_encode($data['data'])));
//print_r(addslashes($data['data']));
//print_r($decoded);
$return_obj->setData(json_decode($data['data']));
}
return $return_obj;
}
ne pas être le problème (d'où un commentaire au lieu d'une réponse), mais vous devez 'urlencode()' la chaîne JSON avant d'envoyer avec cURL http://php.net/urlencode – Jonah
J'ai encodé la chaîne JSON avant de l'envoyer dans cURL, mais le résultat est toujours le même.Cela me rend fou! Merci pour la suggestion cependant – mm2887
après 'if (isset ($ data ['data'])) {', pouvez-vous ajouter un 'var_dump ($ data ['data']) 'et afficher ce qu'il montre? – scoates