php通过curl进行json数据传输

由于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数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值