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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
php获取远程文件大小
Oct 20 PHP
php邮件发送的两种方式
Apr 28 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
浅谈Laravel中使用Slack进行异常通知
May 29 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
header跳转和include包含问题详解
2012/09/08 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
jQuery.each使用详解
2015/07/07 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
JS实现图片切换效果
2018/11/17 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
公开服务承诺制度
2014/03/26 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
关于MySQL中的 like操作符详情
2021/11/17 MySQL