网页中发送请求时,大部分情况都参数以键值组合发送数据的,而一些第三方如java开发的接口中需要发送post请求,请求参数为json类型。
既然要发送json数据,首页我们需要在请求头中定义数据类型为json,告诉服务器客服端发送过来的数据类型为json,设置请求头内容类型:Content-Type: application/json; charset=utf-8
php发送post请求的json参数代码,curl实现:<?php
//如果接口返回的数据为json,这里需要先定义数据类型为json
header("Content-type:application/json;charset=utf-8");
$url="";
$data=array('a'=>'test1','b'=>'test2','c'=>array('1','2','3'));
//这里需要注意的是这里php会自动对json进行编码,而一些java接口不自动解码情况(中文)
//$json_data=json_encode($data,JSON_UNESCAPED_UNICODE);
$json_data=json_encode($data);
//curl方式发送请求
$ch=curl_init();
//设置请求为post
curl_setopt($ch,CURLOPT_POST,1);
//请求地址
curl_setopt($ch,CURLOPT_URL,$url);
//json的数据
curl_setopt($ch,CURLOPT_POSTFIELDS,$json_data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//显示请求头
//curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLINFO_HEADER_OUT,true);
//请求头定义为json数据
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'Content-Type:application/json;charset=utf-8',
'Content-Length:'.strlen($jsonStr)
)
);
$response=curl_exec($ch);
//echocurl_getinfo($ch,CURLINFO_HTTP_CODE);
//echocurl_getinfo($ch,CURLINFO_HEADER_OUT);
curl_close($ch);
//var_dump($response;)
echo$response;
php发送post请求json数据,curl函数的实现。同理,也可以使用file_get_contents函数进行实现post请求,也能实现上面的功能。
php接收post请求json参数代码,不能再用$_POST方式接收,会接收不到数据,因为现在的内容类型是Content-Type:application/json;charset=utf-8,使用$_POST接收的类型为application/x-www-form-urlencoded或multipart/form-data类型://接收post请求来的json数据
$data=file_get_contents('php://input');
//json转php数组
$data=json_decode($data,true);
var_dump($data);