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 相关文章推荐
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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实现将GB编码转换为UTF8
2006/11/25 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
会计专业自荐信范文
2013/12/02 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python