2016-03-03 79 views
2

我正在使用cURL與PHP來驗證API。 像這樣:做PHP cURL選項CURLOPT_HEADER和CURLOPT_RETURNTRANSFER衝突

$ch = curl_init(); 
$headers = []; 
$headers[] = 'Content-Type: application/json'; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_URL, $this->url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->body)); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$this->response = json_decode(curl_exec($ch)); 
curl_close ($ch); 

請求響應的主體包含狀態碼和如果請求已被全成用戶對象。這是一個匿名請求,它返回響應頭中的令牌。

我的問題: 腳本的上述響應爲空。

如果我註釋掉CURLOPT_RETURNTRANSFER選項,然後我得到了我所需要的,但它得到了呼應和響應爲1

如果我註釋掉CURLOPT_HEADER選項,然後我只得到的身體響應。

我試過在http和https之間切換。

我正在使用PHP-5.5.27。

+0

更改$這個 - >響應= json_decode(curl_exec($ CH)); to $ this-> response = curl_exec($ ch);並讓我知道$ this-> response是什麼。您可能會收到無效的json對象。 –

+1

你是對的! 我感到尷尬,我應該。 謝謝,你的時間。 – Armandelis

回答

2

你盲目解碼而不確定你得到的是JSON。簡短的回答:不是。它是包含標題的文本,也可能是一些後面的JSON。

做這樣的事情:

$ch = curl_init(); 
$headers = []; 
$headers[] = 'Content-Type: application/json'; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_URL, $this->url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->body)); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$response = curl_exec($ch); 
$info = curl_getinfo($ch); 
$actualResponseHeaders = (isset($info["header_size"]))?substr($response,0,$info["header_size"]):""; 
$actualResponse = (isset($info["header_size"]))?substr($response,$info["header_size"]):""; 

$this->response = json_decode($actualResponse); 
curl_close ($ch);