迷你REST客户端及服务器端
正在做的项目中要用到REST,项目中用到了REST和CURL两个库,这是我研究后自己简化的客户端及服务器端,请大家指正mini_rest_call.php 客户端rest_server.php 服务器端
正在做的项目中要用到REST,项目中用到了REST和CURL两个库,这是我研究后自己简化的客户端及服务器端,请大家指正
mini_rest_call.php 客户端
rest_server.php 服务器端
mini_rest_call.php 客户端
rest_server.php 服务器端
<?php /** * mini REST call * * @param mixed $url REST服务器端网址 * @param mixed $method 方法 * @param array $params 参数 * @param mixed $request 请求方式(get, post, put, delete) * @param mixed $request 返回格式(json, xml) * * @author PiscDong (http://www.piscdong.com/) */ function mini_rest_call($url, $method='', $params=array(), $request='get', $format='json'){ if(substr($url, -1)!='/' && substr($method, 0, 1)!='/')$url.='/'; $url.=$method; $postfields=http_build_query($params); if($format!='xml')$format='json'; if($request!='post' && $request!='put' && $request!='delete')$request='get'; $ci=curl_init(); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ci, CURLOPT_TIMEOUT, 30); switch($request){ case 'get': $url.='?'.$postfields; break; case 'post': curl_setopt($ci, CURLOPT_POST, TRUE); curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); break; case 'put': curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $headers[]='X-HTTP-Method-Override: PUT'; break; case 'delete': //未测试 curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); break; } $headers[]='User-Agent: mini_rest_client(piscdong.com)'; $headers[]='Accept: application/'.$format; curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLOPT_URL, $url); $response=curl_exec($ci); curl_close($ci); if($response!=''){ if($format=='json'){ return json_decode($response, true); }else{ return simplexml_load_string($response); } } }
2. [文件] rest_server.php ~ 2KB 下载(18) 跳至 [1] [2] [全屏预览]
<?php function array2xml($array){ $xml=''; foreach($array as $k=>$v){ $xml.='<'.$k.'>'; if(is_array($v)){ $xml.=array2xml($v); }else{ $xml.=$v; } $xml.='</'.$k.'>'; } return $xml; } $format='json'; if(isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT']=='application/xml')$format='xml'; $return['format']=$format; $method=''; if(isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO']!=''){ if(substr($_SERVER['PATH_INFO'], 0, 1)=='/')$method=substr($_SERVER['PATH_INFO'], 1); } if($method!=''){ $return['method']=$method; }else{ $return['method_err']='no method'; } $request=''; if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']!=''){ switch($_SERVER['REQUEST_METHOD']){ case 'GET': $request='get'; foreach($_GET as $k=>$v)$return['param_'.$k]=$v; break; case 'POST': $request='post'; foreach($_POST as $k=>$v)$return['param_'.$k]=$v; break; case 'PUT': $request='put'; $param=file_get_contents("php://input"); if($param!=''){ parse_str($param, $param_r); foreach($param_r as $k=>$v)$return['param_'.$k]=$v; } break; case 'DELETE': $request='delete'; $param=file_get_contents("php://input"); if($param!=''){ parse_str($param, $param_r); foreach($param_r as $k=>$v)$return['param_'.$k]=$v; } break; } } if($request!=''){ $return['request']=$request; }else{ $return['request_err']='no request'; } if($format=='json'){ echo json_encode($return); }else{ echo '<?xml version="1.0" encoding="utf-8"?><xml>'; echo array2xml($return); echo '</xml>'; }
- 上一篇:最小失真率压缩JPG图片
- 下一篇:非常实用的php弹出错误警告函数
精彩图集
精彩文章