2016-11-01 12 views
0

Ich versuche, einige JSON-Daten mit cURL POST, aber ich habe ein Problem beim Setzen der Header.POST JSON-Daten mit cURL in PHP 5

Mein aktueller Code sieht so aus:

$ch = curl_init('https://secure.example.com'); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string) 
]); 

if (!$result = curl_exec($ch)) 
{ 
    echo 'Failed: ' . curl_error($ch); 
    curl_close($ch); 
    die; 
} 

curl_close($ch); 

Dieser Code funktioniert gut bei der Verwendung von localhost zu testen (PHP 7). Auf unserem Webserver wird jedoch nur PHP 5 ausgeführt. Daher wird die Option CURLOPT_HTTPHEADER nicht unterstützt.

Wenn ich es in meinem Code behalte, bekomme ich einen "500 Interner Fehler". Wenn ich es herausnehmen, meine curl_exec() nicht ausgeführt wird, und ich die Fehlermeldung "fehlgeschlagen:" aber ohne curl_error() angezeigt wird.

Gibt es eine Möglichkeit, cURL JSON-Daten ohne diese Option zu erwarten?

+0

Welche cURL-Version haben Sie auf dem Webserver? – apokryfos

+0

Wenn Sie eine 500 erhalten, gehen Sie in das Fehlerprotokoll des Servers für Details. –

+0

Tatsächlich wird die Anweisung * 'CURLOPT_HTTPHEADER' Option in PHP 5 nicht unterstützt * ist falsch. – apokryfos

Antwort

1

Ersetzen Sie diese

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
'Content-Type: application/json', 
'Content-Length: ' . strlen($data_string) 
]); 

Mit

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json', 
'Content-Length: ' . strlen($data_string) 
)); 

PHP 5.4+ das neue Array-Syntax von [] unterstützen, aber PHP < 5.4 Bedürfnisse Array()

Short Array-Syntax-Unterstützung wurde hinzugefügt in PHP 5.4 http://php.net/manual/en/migration54.new-features.php

1

Das Problem, das Sie bekommen, ist nicht über CURLOPT_HTTPHEADER. Es ist seit Ewigkeiten in PHP. Die neue Array-Syntax [] wurde in PHP 5.4 hinzugefügt.

Ihren Code ändern:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string) 
)); 

und es wird gut funktionieren.