最近,在练习项目中遇到对接其他服务端的接口,需要提交JSON数据与之进行交互对接的情况,由于,之前的接口对接,很多都是FORM-DATA的格式就可以了,所以,这次需要调整一下相关对接函数的HEADER中属性的设置,参考不少文章的设置方法,这里,也借鉴一下其中的一个案例代码做一下记录和说明:
function http($url, $data = NULL, $json = false)
{
$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)) {
if($json && is_array($data)){
$data = json_encode( $data );
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
if ($json) {
// 发送JSON数据
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json; charset=utf-8',
'Content-Length:' . strlen($data)
)
);
}
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
$errorno = curl_errno($curl);
if ($errorno) {
return array('errorno' => false, 'errmsg' => $errorno);
}
curl_close($curl);
return json_decode($res, true);
}
其中,比较关键的设置,是以下这两句话为:
curl_setopt($curl, CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json; charset=utf-8',
'Content-Length:' . strlen($data)
)
);
这边,简单学习了下CURLOPT_HTTPHEADER属性可以设置HTTP请求头部的格式,此处,需要根据需求调整为application/json,但是,后面那句话'Content-Length:' . strlen($data),是否一定需要,目前,我这边,也不是特别确定。也想通过对本次遇到问题的记录,后续可以加强对CURL这块的学习和认识,不仅仅可以解决遇到的功能实现问题,也能对相关知识的有更深层次的学习认识和了解。