1. 程式人生 > >用curl post json資料一直傳不過去的問題!

用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方法去掉即可。