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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
php解析url的三个示例
Jan 20 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
Laravel实现用户注册和登录
Jan 23 PHP
PHP访问Google Search API的方法
Mar 05 PHP
php提高网站效率的技巧
Sep 29 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
php 远程关机操作的代码
2008/12/05 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
图片自动更新(说明)
2006/10/02 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
express 项目分层实践详解
2018/12/10 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
Python操作MySQL简单实现方法
2015/01/26 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
寒假实习自荐信
2014/01/26 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
草船借箭教学反思
2014/02/03 职场文书
儿童生日会策划方案
2014/05/15 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
公安机关起诉意见书
2015/05/20 职场文书
Pytest中conftest.py的用法
2021/06/27 Python