apirestful php自动测试,PHP实现自动识别Restful API的返回内容类型
如题,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 = 'http://www.php.cn';
$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实现自动识别Restful API的返回内容类型相关文章请关注PHP中文网!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
apirestful php自动测试,PHP实现自动识别Restful API的返回内容类型相关推荐
- php 自动返回,PHP实现自动识别Restful API的返回内容类型
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- RESTful API接口基本内容
RESTful API接口基本内容 目录 RESTful API接口基本内容 一.RESTful是什么? 1.1.基本特点 1.2.设计概念和准则 1.3.http协议 二.RESTful与SOAP ...
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qingfeng812/article/details/74738885 效果展示: 浏览器截图 ht ...
- web返回的数据集格式_SpringBoot RESTful API返回统一数据格式还不懂?
关于 Spring 的全局处理,我有两方面要说: 统一数据返回格式 统一异常处理 为了将两个问题说明清楚,将分两个章节分别说明,本章主要说第一点 有童鞋说,我们项目都做了这种处理,就是在每个 API ...
- springboot集成swagger2构建RESTful API文档
在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...
- 整合swagger2生成Restful Api接口文档
整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...
- 好RESTful API的设计原则
做出一个好的API设计很难.API表达的是你的数据和你的数据使用者之间的契约.打破这个契约将会招致很多愤怒的邮件,和一大堆伤心的用户-因为他们手机上的App不工作了.而文档化只能达到一半的效果,并且也 ...
- 深入探索REST(1):如何设计好的RESTful API?
REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...
- 如何设计好的RESTful API?
REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...
最新文章
- 一次订单号重复引起的事故,可把我给坑惨了!
- 什么是交换(Swap)与伪交换(Pseudo swap)
- 刘强东:第四次零售革命意义将超互联网
- 日期DatePicker与时间TimePicker控件
- cad转shp 奥维_CAD转换工具程序包(附下载)
- Tomcat启动设置环境变量
- GetSystemInfo()
- matlab gradient
- 解决表单提交的数据丢失问题
- 【CSS】学习笔记2 字体设置
- 因此,您处于if / else地狱中-这是摆脱困境的方法
- 11988 - Broken Keyboard (a.k.a. Beiju Text)
- 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
- CentOS 6.7 配置JSP运行环境之resin
- JS中某事件需要同时调用几个function另类解决办法。
- QT 5.9.0下载安装及配置教程(自动化运维环境)
- Windows错误、问题汇总
- 大学课设之Mysql图书管理设计
- ical4j 实现ICS文件的生成和解析
- php获得客户端ip地址范例
热门文章
- mysql打印语句_抓取mysql、redis、mongodb、http等协议并打印语句
- no such file or directory什么意思_为什么这次 MySQL 崩溃恢复要这么久-爱可生
- Vue之表单数据收集
- 作为开发,你对进程和线程能否区分开来呢?
- android checkbox 选中事件_挖穿Android第四十九天
- Java 算法 换零钞
- 当前微型计算机的主存储器可分为,当前微型计算机的主存储器可分为
- pytorch搭建TextCNN与使用案例
- python使用xlwt创建与保存excel文件
- sklearn 使用joblib保存模型,并解决cannot import name joblib from sklearn.externals报错