2016-11-01 82 views
0

我正在嘗試使用cURL發佈一些JSON數據,但我在設置標題時遇到問題。使用cURL在PHP 5中發佈JSON數據

我當前的代碼看起來像這樣:測試使用本地主機(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()未運行,並且收到錯誤消息「失敗:」,但沒有顯示curl_error()

有沒有辦法設置cURL期望JSON數據沒有這個選項?

+0

你在網絡服務器上有什麼cURL版本? – apokryfos

+0

如果你得到一個500,你會看看服務器的錯誤日誌中的細節。 –

+0

實際上,PHP 5中不支持聲明*'CURLOPT_HTTPHEADER'選項*爲false。 – apokryfos

回答

1

替換此

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

隨着

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

PHP 5.4+支持[]新的數組的語法,但PHP < 5.4需求陣列()溶液中加入

短數組語法支持在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) 
)); 

,它會正常工作。