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中memcache的应用
Jun 18 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
YII实现分页的方法
Jul 09 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
调试php程序的简单步骤
Oct 04 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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验证码类代码分享(已封装成类)
2011/07/17 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php绘制圆形的方法
2015/01/24 PHP
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python版飞机大战代码分享
2018/11/20 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
python 调试冷知识(小结)
2019/11/11 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
优秀团员个人的自我评价
2013/10/02 职场文书
《四季》教学反思
2014/04/08 职场文书
公司户外活动总结
2014/07/04 职场文书
安全承诺书格式范本
2015/04/28 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
python_tkinter弹出对话框创建
2022/03/20 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技