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里的JS打印函数
Oct 09 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
学习PHP Cookie处理函数
Aug 09 PHP
CI(CodeIgniter)框架视图中加载视图的方法
Mar 24 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
php 的多进程操作实践案例分析
Feb 28 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程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python语音识别实践之百度语音API
2018/08/30 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
Python2与Python3的区别点整理
2019/12/12 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
大学生个人学年总结
2015/02/15 职场文书
婚宴致辞
2015/07/28 职场文书
团组织关系介绍信
2019/06/24 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书