wake-up-neo.com

Problem beim Lesen des HTTP-Anforderungshauptteils von einem JSON POST im PHP

Ich schreibe ein Skript, das als Endpunkt für einen Webhook registriert ist. Ich weiß, dass es erfolgreich registriert wurde, weil ich den Header jeder Anforderung in meine Serverprotokolle schreibe. Hier ist ein Beispiel:

Content-Type: text/xml; charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: =={obfuscated}== 
Content-Length: 1918

Mit der API, mit der ich mich registriert habe, wird ein JSON-Objekt in mein Skript gepostet, und ich möchte dieses Objekt mit PHP analysieren. Wie Sie dem Anforderungsheader entnehmen können, gibt es ein Nice-Joker-Objekt, das nur darauf wartet, analysiert zu werden. Es scheint einfach, aber es war nicht so. 

Zuerst habe ich versucht, $_POST['json'] oder nur $_POST zu verwenden, aber da sich die Daten nicht in einem Array befinden, war ich mir nicht wirklich sicher, wie ich darauf zugreifen kann.

Ich habe versucht, file_get_contents('php://input') und fopen('php://input', 'r') mit und ohne json_decode() zu verwenden, aber kein Glück. Ich kann http_get_request_body() nicht verwenden, da der Server, auf dem ich mich befinde, keine PECL hat und dies außerhalb meiner Kontrolle liegt.

Gibt es andere Möglichkeiten, mit dem POST-ed-JSON-Objekt zu interagieren, das mir fehlt? Vielen Dank!

43
Hartley Brody

Vielen Dank für die Eingabe. Es stellt sich heraus, dass ich gerade gebraucht habe

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array

dabei gab der zweite Parameter in json_decode das Objekt als Array zurück.

Hoffe das hilft jemand anderem!

123
Hartley Brody

Auch wenn folgendes funktioniert. 

$inputJSON = file_get_contents('php://input');

Wenn Sie $ _POST weiterhin verwenden möchten, senden Sie die Daten als FormData

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
0