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控制网页过期时间的代码
Sep 28 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
如何打开php的gd2库
Feb 09 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 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生成便于打印的网页
2006/10/09 PHP
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python学习必备知识汇总
2017/09/08 Python
python的unittest测试类代码实例
2017/12/07 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
基于python历史天气采集的分析
2019/02/14 Python
django云端留言板实例详解
2019/07/22 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python实现在线翻译
2020/06/18 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
社区党务公开实施方案
2014/03/18 职场文书
四年级学生评语大全
2014/04/21 职场文书
班级团队活动方案
2014/08/14 职场文书
公司股东合作协议书
2014/09/14 职场文书
创先争优宣传标语
2014/10/08 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技