您的位置:首页 > 编程语言 > PHP开发

php通过curl进行json数据传输

2016-08-04 21:20 399 查看
由于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数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php json curl