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 相关文章推荐
ezSQL PHP数据库操作类库
May 16 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
php实现建立多层级目录的方法
Jul 19 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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+mysql分页代码详解
2008/03/27 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
Python urlopen 使用小示例
2008/09/06 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python正规则表达式学习指南
2016/08/02 Python
Python内存管理实例分析
2019/07/10 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
爱游人:Travelliker
2017/09/05 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
语文课外活动总结
2014/08/27 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
寒假安全保证书
2015/02/28 职场文书
个人求职意向书
2015/05/11 职场文书
画展观后感
2015/06/17 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis