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 smarty模版引擎中的缓存应用
Dec 11 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 PHP
php array_map()数组函数使用说明
Jul 12 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 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 Token(令牌)设计
2008/03/15 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
通过DOM脚本去设置样式信息
2010/09/19 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
npm qs模块使用详解
2020/02/07 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
Python的SQLAlchemy框架使用入门
2015/04/29 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
python3注册全局热键的实现
2020/03/22 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
函授毕业生自我鉴定
2013/11/06 职场文书
夜大毕业生自我评价分享
2013/11/10 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL