2016-11-01 15 views
0

cURLを使用してJSONデータをPOSTしようとしていますが、ヘッダーの設定に問題があります。PHP 5でcURLを使用してJSONデータをPOSTする

私の現在のコードはそうのようになります。使用してローカルホスト(PHP 7)をテストするとき

$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); 

このコードは正常に動作します。ただし、WebサーバーはPHP 5のみを実行するため、CURLOPT_HTTPHEADERオプションはサポートされていません。

私のコードに保管すると、「500内部エラー」が発生します。 私が取り出したとき、curl_exec()は実行されず、エラーメッセージ "Failed:"が表示されましたが、curl_error()が表示されませんでした。

このオプションを使用しないとJSONデータを期待するようにcURLを設定する方法はありますか?

+0

ウェブサーバーにはどのcURLバージョンがありますか? – apokryfos

+0

500を取得した場合は、詳細についてはサーバーのエラーログを参照してください。 –

+0

実際には、* CURLOPT_HTTPHEADERオプションはPHP 5ではサポートされていません。*はfalseです。 – apokryfos

答えて

1

ショート配列構文のサポートが追加されました)

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

PHPは[]の新しい配列構文をサポートしていますが、PHP < 5.4ニーズ配列(5.4+でこの

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

を交換してくださいPHP 5.4でhttp://php.net/manual/en/migration54.new-features.php

1

あなたが得ている問題は、CURLOPT_HTTPHEADERではありません。これは、PHPの年齢です。

しかし、PHP 5.4に追加された新しい配列構文[]があります。

にコードを変更し

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

、それが正常に動作します。

関連する問題