PHP实现自动识别Restful API的返回内容类型


Posted in PHP onFebruary 07, 2015

如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据?

其实这也不难,因为Rest API也是基于http协议的,只要我们按照协议走,就能做到自动化识别 API 的内容,方法如下:

1、API服务端要返回明确的 http Content-Type头信息,如:

Content-Type: application/json; charset=utf-8
Content-Type: application/xml; charset=utf-8
Content-Type: text/html; charset=utf-8

2、PHP端(客户端)接收到上述头信息后,再酌情自动化处理,参考代码如下:

<?php
// 请求初始化
$url = 'https://3water.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

// 返回的 http body 内容
$response = curl_exec($ch);

// 返回的 http header 的 Content-Type 的内容
$contentType = curl_getinfo($ch, 'content_type');

// 关闭请求资源
curl_close($ch);

// 结果自动格式输出
$autoDetectFormats = array(
 'application/xml' => 'xml',
 'text/xml'  => 'xml',
 'application/json' => 'json',
 'text/json'  => 'json',
 'text/csv'  => 'csv',
 'application/csv' => 'csv',
 'application/vnd.php.serialized' => 'serialize'
);

if (strpos($contentType, ';'))
{
 list($contentType) = explode(';', $contentType);
}

$contentType = trim($contentType);

if (array_key_exists($contentType, $autoDetectFormats))
{
 echo '_' . $autoDetectFormats[$contentType]($response);
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 常用 格式化 方法
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

/**
 * 格式化xml输出
 */
function _xml($string)
{
 return $string ? (array)simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA) : array();
}

/**
 * 格式化csv输出
 */
function _csv($string)
{
 $data = array();

 $rows = explode("\n", trim($string));
 $headings = explode(',', array_shift($rows));
 foreach( $rows as $row )
 {
 // 利用 substr 去掉 开始 与 结尾 的 "
 $data_fields = explode('","', trim(substr($row, 1, -1)));
 if (count($data_fields) === count($headings))
 {
  $data[] = array_combine($headings, $data_fields);
 }
 }

 return $data;
}

/**
 * 格式化json输出
 */
function _json($string)
{
 return json_decode(trim($string), true);
}

/**
 * 反序列化输出
 */
function _serialize($string)
{
 return unserialize(trim($string));
}

/**
 * 执行PHP脚本输出
 */
function _php($string)
{
 $string = trim($string);
 $populated = array();
 eval("\$populated = \"$string\";");

 return $populated;
}
PHP 相关文章推荐
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
php中去除所有js,html,css代码
Oct 12 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php多文件上传实现代码
Feb 20 PHP
php读取文件内容到数组的方法
Mar 16 PHP
PHP+jQuery+Ajax实现用户登录与退出
Apr 27 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 #PHP
迁移PHP版本到PHP7
Feb 06 #PHP
php include类文件超时问题处理
Feb 06 #PHP
PHP的cURL库简介及使用示例
Feb 06 #PHP
PHP实用函数分享之去除多余的0
Feb 06 #PHP
php定时执行任务设置详解
Feb 06 #PHP
PHP四舍五入、取整、round函数使用示例
Feb 06 #PHP
You might like
德生BCL3000的电路分析和打磨
2021/03/02 无线电
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
解决python replace函数替换无效问题
2020/01/18 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
25岁生日感言
2014/01/13 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
车队司机自我鉴定
2014/03/02 职场文书
师德建设实施方案
2014/03/21 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
德育标兵事迹材料
2014/08/24 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
2016春季运动会前导词
2015/11/25 职场文书