Czytanie JSON POST przy użyciu PHP
Dużo się rozejrzałem przed wysłaniem tego pytania, więc przepraszam, jeśli jest to w innym poście i to jest tylko moje drugie pytanie tutaj, więc przepraszam, jeśli nie sformatuję poprawnie tego pytania.
Mam naprawdę prostą usługę internetową, którą stworzyłem, która musi przyjąć wartości postów i zwrócić tablicę kodowaną JSON. Wszystko działało dobrze, dopóki nie powiedziano mi, że będę musiał opublikować dane formularza z aplikacją typu content / json. Od tego czasu nie mogę zwracać żadnych wartości z usługi internetowej i jest to zdecydowanie coś wspólnego z tym, jak filtruję ich wartości postów.
Zasadniczo w mojej lokalnej konfiguracji utworzyłem stronę testową, która wykonuje następujące czynności -
$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);
W serwisie mam to (usunąłem niektóre funkcje) -
<?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);
?>
Zasadniczo wiem, że wynika to z braku wartości $ _POST, ale nie mogę znaleźć tego, co muszę umieścić zamiast $ _POST. Próbowałem json_decode ($ _ POST), file_get_contents („wejście php: //”) i wiele innych sposobów, ale trochę strzelałem w ciemności.
Każda pomoc byłaby bardzo mile widziana.
Dzięki, Steve
Dzięki Michael za pomoc, to był zdecydowany krok naprzód. Teraz mam przynajmniej repsonse, kiedy powtarzam post… nawet jeśli jest on zerowy
zaktualizowany CURL -
$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));
zaktualizowałem php na stronie, na której publikowane są dane -
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array
print_r(json_encode($input));
Tak jak mówię, widzę teraz odpowiedź, która poprzednio zwracała pustą stronę