2013-07-16 92 views
0

我正在構建API,但在使用cURL進行測試時遇到了一些問題。發佈JSON時cURL頭部問題

我的代碼如下所示:

$people = array(array('name' => urlencode('casper'), 
         'shoesize' => urlencode(41) 
        ), 
       array('name' => urlencode('charlotte'), 
         'activated' => urlencode(1) 
        ) 
     ); 

$data = http_build_query(array('data' => json_encode($people))); 
$url = '...'; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Content-Type: application/json', 
    'Connection: Keep-Alive' 
)); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 

curl_close($ch); 

return $result; 

在URL端點的方法僅返回$ _ POST [「數據」。

這一直工作,直到我設置我的頭在cURL。沒有他們設置,數據通過沒有問題。

+0

究竟是什麼問題?你提到它沒有標題可以正常工作,但是它們有什麼問題? –

+0

@JohnVanDeWeghe OP正在使用json數據,但沒有正確發送json數據。請參閱下面的答案 – alwaysLearn

+0

問題是我需要標頭類型來正確處理請求。但是在cURL中設置它們時,不會發送數據。 – Stromgren

回答

0

如果您正在使用json頭然後發送JSON數據 使用fopen('php://input','r');

更換

$data = http_build_query(array('data' => json_encode($people))); 

$data = json_encode($people); 

,並在目標文件讀取,或任何不都送頭。

你可以看到可能blog

+0

我需要標題,因爲我的API應該能夠處理不同的數據格式。感謝你的回答。我不明白爲什麼我不得不使用fopen? – Stromgren

+0

你能得到想要的結果嗎?我會向你解釋爲什麼你需要這樣 – alwaysLearn

+0

當我這樣做時,請求會發送。但我無法檢索結果。尋找$ _POST給我一個空的數組。不知道如何用fopen實際輸出或將其轉換爲PHP數組。就像我可以只對數據進行json_decode一樣。 – Stromgren