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,不用COM,生成excel文件
Oct 09 PHP
配置支持SSI
Nov 25 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php旋转图片90度的方法
Nov 07 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
yii2简单使用less代替css示例
Mar 10 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
php中上传文件的的解决方案
Sep 25 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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加密解密的代码
2007/07/16 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python入门篇之面向对象
2014/10/20 Python
Python实现的检测网站挂马程序
2014/11/30 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python生成并处理uuid的实现方式
2020/03/03 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
PHP面试题及答案二
2015/05/23 面试题
GC是什么?为什么要有GC?
2013/12/08 面试题
外贸实习生自荐信范文
2013/11/24 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书