php curl操作API接口类完整示例


Posted in PHP onMay 21, 2019

本文实例讲述了php curl操作API接口类。分享给大家供大家参考,具体如下:

<?php
namespace curl;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/6/16
 * Time: 9:54
 */
class ApiClient
{
//请求的token
 const token='token_str';
 //请求url
 private $url;
 //请求的类型
 private $requestType;
 //请求的数据
 private $data;
 //curl实例
 private $curl;
 public $status;
 private $headers = array();
 /**
  * [__construct 构造方法, 初始化数据]
  * @param [type] $url  请求的服务器地址
  * @param [type] $requestType 发送请求的方法
  * @param [type] $data 发送的数据
  * @param integer $url_model 路由请求方式
  */
 public function __construct($url, $data = array(), $requestType = 'get') {
  //url是必须要传的,并且是符合PATHINFO模式的路径
  if (!$url) {
   return false;
  }
  $this->requestType = strtolower($requestType);
  $paramUrl = '';
  // PATHINFO模式
  if (!empty($data)) {
   foreach ($data as $key => $value) {
    $paramUrl.= $key . '=' . $value.'&';
   }
   $url = $url .'?'. $paramUrl;
  }
  //初始化类中的数据
  $this->url = $url;
  $this->data = $data;
  try{
   if(!$this->curl = curl_init()){
    throw new Exception('curl初始化错误:');
   };
  }catch (Exception $e){
   echo '<pre>';
   print_r($e->getMessage());
   echo '</pre>';
  }
  curl_setopt($this->curl, CURLOPT_URL, $this->url);
  curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
  //curl_setopt($this->curl, CURLOPT_HEADER, 1);
 }
 /**
  * [_post 设置get请求的参数]
  * @return [type] [description]
  */
 public function _get() {
 }
 /**
  * [_post 设置post请求的参数]
  * post 新增资源
  * @return [type] [description]
  */
 public function _post() {
  curl_setopt($this->curl, CURLOPT_POST, 1);
  curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->data);
 }
 /**
  * [_put 设置put请求]
  * put 更新资源
  * @return [type] [description]
  */
 public function _put() {
  curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT');
 }
 /**
  * [_delete 删除资源]
  * delete 删除资源
  * @return [type] [description]
  */
 public function _delete() {
  curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
 }
 /**
  * [doRequest 执行发送请求]
  * @return [type] [description]
  */
 public function doRequest() {
  //发送给服务端验证信息
  if((null !== self::token) && self::token){
   $this->headers = array(
    'Client-Token:'.self::token,//此处不能用下划线
    'Client-Code:'.$this->setAuthorization()
   );
  }
  //发送头部信息
  $this->setHeader();
  //发送请求方式
  switch ($this->requestType) {
   case 'post':
    $this->_post();
    break;
   case 'put':
    $this->_put();
    break;
   case 'delete':
    $this->_delete();
    break;
   default:
    curl_setopt($this->curl, CURLOPT_HTTPGET, TRUE);
    break;
  }
  //执行curl请求
  $info = curl_exec($this->curl);
  //获取curl执行状态信息
  $this->status = $this->getInfo();
  return json_decode($info);
 }
 /**
  * 设置发送的头部信息
  */
 private function setHeader(){
  curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers);
 }
 /**
  * 生成授权码
  * @return string 授权码
  */
 private function setAuthorization(){
  $authorization = md5(substr(md5(self::token), 8, 24).self::token);
  return $authorization;
 }
 /**
  * 获取curl中的状态信息
  */
 public function getInfo(){
  return curl_getinfo($this->curl);
 }
 /**
  * 关闭curl连接
  */
 public function __destruct(){
  curl_close($this->curl);
 }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 PHP
PHP钩子实现方法解析
May 21 #PHP
php面向对象程序设计中self与static的区别分析
May 21 #PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 #PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 #PHP
PHP __call()方法实现委托示例
May 20 #PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 #PHP
PHP常量define和const的区别详解
May 18 #PHP
You might like
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
仅利用30行Python代码来展示X算法
2015/04/01 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
django实现类似触发器的功能
2019/11/15 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
应届中专生自荐书范文
2014/02/13 职场文书
三项教育活动实施方案
2014/03/30 职场文书
教师演讲稿大全
2014/05/16 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
市场总监岗位职责
2015/02/11 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
图书馆义工感想
2015/08/07 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书