用curl post json資料一直傳不過去的問題!
先上程式碼看下問題原因:post方法程式碼:
/**
* 介面傳送資料 POST
* @param String $url 請求的地址
* @param Array $header 自定義的header資料
* @param Array $content POST的資料
* @return String
*/
public function tocurl($url, $header, $content){
$ch = curl_init();
if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 從證書中檢查SSL加密演算法是否存在
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content));
$response = curl_exec($ch);
if($error=curl_error($ch)){
die($error);
}
curl_close($ch);
return $response;
}
//傳送json的介面
public function test2(){
$url = 'http://api.openluat.com/mafu/event/device/status';
$header=array(
'Content-Type:application/json',
'Authorization:11111111111111111'
);
$imei = '869300031672938';
$content = array(
"imei"=>$imei
);
$content = json_encode($content);
// print_r($content);exit();
$response = $this->tocurl($url, $header, $content);
$data = json_decode($response, true);
print_r($data);
return $data;
}
這樣子的呼叫介面,一直返回引數錯誤,後來發現是在content裡資料沒有json傳送過去,解決方法就是在tocurl方法裡把http_build_query方法去掉即可。