Heim > Backend-Entwicklung > PHP-Tutorial > Automatische PHP-Identifizierung des von Restful zurückgegebenen Inhaltstyps

Automatische PHP-Identifizierung des von Restful zurückgegebenen Inhaltstyps

*文
Freigeben: 2023-03-18 12:12:01
Original
1437 Leute haben es durchsucht

PHP如何针对Restful的返回内容类型进行自动识别?本文主要介绍了PHP实现自动识别Restful的返回内容类型,并实现自动自动渲染成 json、xml等数据格式输出,希望对大家有所帮助。

如题,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
Nach dem Login kopieren



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


<?php
// 请求初始化
$url = &#39;http://www.jb51.net&#39;;
$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, &#39;content_type&#39;);

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

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

if (strpos($contentType, &#39;;&#39;))
{
 list($contentType) = explode(&#39;;&#39;, $contentType);
}

$contentType = trim($contentType);

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

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

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

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

 $rows = explode("\n", trim($string));
 $headings = explode(&#39;,&#39;, array_shift($rows));
 foreach( $rows as $row )
 {
 // 利用 substr 去掉 开始 与 结尾 的 "
 $data_fields = explode(&#39;","&#39;, 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;
}
Nach dem Login kopieren


相关推荐:

关于RestfulAPI使用方法总结

php基于curl扩展制作跨平台的restfule 接口

PHP编写RESTful接口的方法

Das obige ist der detaillierte Inhalt vonAutomatische PHP-Identifizierung des von Restful zurückgegebenen Inhaltstyps. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage