php通过curl进行json数据传输

来源:互联网 发布:阿里云专有网络 编辑:程序博客网 时间:2024/05/16 08:32

由于php curl 数据传输对多维数据貌似不支持,简单的办法就是讲多维数组转化为json操作

        $data['author'] = $this->getPost('author');        $data['article_category'] = $this->getPost('categroy');        $data['image'] = $this->getPost('thumb');        $data['image_2'] = $this->getPost('image');        $data['status'] = 1;        $data['allow_comment'] = 0;        $data['need_approval'] = 0;        $data['sort_order'] = 0;        $data['article_store'] = array('0');        $data['app_category_id'] = 2;          $data['article_description']['2'] = array(            'name'  =>  $this->getPost('title'),            'tag'   =>  $this->getPost('tags'),            'title' =>  $this->getPost('description'),            'meta_keyword'  =>  $this->getPost('tags'),            'meta_description'  =>  $this->getPost('description'),            'content'   =>  $content,        );        $url = 'index.php?route=article/api';         $curl = curl_init();        curl_setopt($curl, CURLOPT_URL, $url);        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);        if (!empty($data))        {            //由于curl不支持传多维数组,转化json传输            $data = json_encode($data);            curl_setopt($curl, CURLOPT_POST, 1);            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);            //这里必须定义数据传输类型为json            curl_setopt($curl, CURLOPT_HTTPHEADER, array(                  'Content-Type: application/json; charset=utf-8',                  'Content-Length: ' . strlen($data)                  )            );        }        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);        //获取json格式的返回结果        $output = curl_exec($curl);        curl_close($curl);        //对结果进行json解析        $output = json_decode($output,true);
        // 由于php 的post默认不支持接受json数据格式,我们可以采用$GLOBALS['HTTP_RAW_POST_DATA']来回去post数据        $post = json_decode($GLOBALS['HTTP_RAW_POST_DATA'],true);        //如果不是post访问,报错        if ($this->request->server['REQUEST_METHOD'] != 'POST') {            $data['info'] = false;            $data['error_warning'] = '错误的请求方式';        }        elseif (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm_api($post)) {            //进行数据库操作,并定义返回值            $data['article_id'] = $this->model_article_articleapi->addArticle($post);            $data['info'] = true;        }}else{            if (isset($this->error['warning'])) {                $data['error_warning'] = $this->error['warning'];            } else {                $data['error_warning'] = '提交的数据不符合要求';            }            $data['info'] = false;        }        //对返回值进行json编码并输出        echo json_encode($data);

关键点1:curl不支持多维数据,要讲数组转化为json格式传输
关键点2:curl传输json需要额外定义数据传输格式
关键点3:通过 $GLOBALS[‘HTTP_RAW_POST_DATA’] 获取post过来的json数据

1 0