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 相关文章推荐
MySQL GBK→UTF-8编码转换
May 24 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
php格式文件打开的四种方法
Feb 24 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
七种PHP开发环境搭建工具
Jun 28 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php编程每天必学之验证码
2016/03/03 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
PHP之header函数详解
2021/03/02 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
Python函数式编程
2017/07/20 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
python基于opencv 实现图像时钟
2021/01/04 Python
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
医学专业毕业生推荐信
2014/07/12 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
公司委托书格式
2014/08/01 职场文书
前台文员岗位职责
2015/02/04 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js