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速度全攻略
Oct 09 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
PHP数组实例总结与说明
Aug 23 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
php+mysql实现无限分类实例详解
Jan 15 PHP
php实现TCP端口检测的方法
Apr 01 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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垃圾回收机制简单说明
2010/07/22 PHP
解析link_mysql的php版
2013/06/30 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python字典DICT类型合并详解
2017/08/17 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
医科学校毕业生自荐信
2013/11/09 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
单位介绍信范文
2014/01/18 职场文书
会计学专业求职信
2014/07/17 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书