PHP封装CURL扩展类实例


Posted in PHP onJuly 28, 2015

本文实例讲述了PHP封装CURL扩展类。分享给大家供大家参考。具体如下:

<?php
/**
* @description: 封装CURL扩展
* @date: 2014-07-28 16:04
*/
/**
* @编码规范
* @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage
* @variable 变量名小写, 变量名为多个单词, 每个单词小写,使用下划线_分割 eg: $curl_result
* @function 函数名与类名规则相同 eg: function SendRequest
* @params 函数形参规则与变量名相同
* @class-variable 成员变量,以下划线结尾,多个单词使用下划线分隔. eg: private $host_name_
*/
/**
* @要求
*
*/
class Curl{
/**
* @请求的host
*/
private $host_;
/**
* @curl 句柄
*/
private $ch_;
/**
* @超时限制时间
*/
const time_=5;
/**
* @请求的设置
*/
private $options_;
/**
* @保存请求头信息
*/
private $request_header_;
/**
* @保存响应头信息
*/
private $response_header_;
/**
* @body_ 用于保存curl请求返回的结果
*/
private $body_;
/**
* @读取cookie
*/
private $cookie_file_;
/**
* @写入cookie
*/
private $cookie_jar_;
/**
* @todo proxy
* @构造函数,初始化CURL回话
*/
public function Start($url){
$this->ch_ = curl_init($url);
curl_setopt($this->ch_, CURLOPT_HEADER, 1);
curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 1 );
}
/**
* @返回响应头
*/
public function ResponseHeader($url){
if (!function_exists('http_parse_headers')) {
function http_parse_headers ($raw_headers){
$headers = array();
foreach (explode("\n", $raw_headers) as $i => $h) {
$h = explode(':', $h, 2);
if (isset($h[1])) {
if(!isset($headers[$h[0]])) {
$headers[$h[0]] = trim($h[1]);
} else if(is_array($headers[$h[0]])) {
$tmp = array_merge($headers[$h[0]],array(trim($h[1])));
$headers[$h[0]] = $tmp;
} else {
$tmp = array_merge(array($headers[$h[0]]),array(trim($h[1])));
$headers[$h[0]] = $tmp;
}
}
}
return $headers;
}
}
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
$this->body_=$this->Execx();
$header_size = curl_getinfo($this->ch_, CURLINFO_HEADER_SIZE);
$this->response_header_ = substr($this->body_, $start = 0, $offset = $header_size);
$this->response_header_ = http_parse_headers($this->response_header_);
print_r($this->response_header_);
return $this->Close($this->body_);
}
/**
* @读取cookie
*/
public function LoadCookie($url,$cookie_file){
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
curl_setopt($this->ch_, CURLOPT_COOKIEFILE , $cookie_file);
$this->body_=$this->Execx();
return $this->Close($this->body_);
}
/**
* @写入cookie
*/
public function SaveCookie($url){
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
curl_setopt($this->ch_, CURLOPT_COOKIEFILE ,'cookie.txt');
curl_setopt($this->ch_, CURLOPT_COOKIEJAR , 'cookie.txt');
$this->body_=$this->Execx();
return $this->Close($this->body_);
}
/**
* @设置HEADER
*/
public function SetHeader($headers = null){
if (is_array($headers) && count($headers) > 0) {
curl_setopt($this->ch_, CURLOPT_HTTPHEADER, $headers);
}
}
/**
* @GET请求
*/
public function Get($url, array $params = array()) {
if ($params) {
if (strpos($url, '?')) {
$url .= "&".http_build_query($params);
}
else {
$url .= "?".http_build_query($params);
}
}
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
if (strpos($url, 'https') === 0) {
curl_setopt($this->ch_, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
}
$this->body_=$this->Execx();
return $this->Close($this->body_);
}
/**
* @POST请求
*/
public function Post($url, array $params = array()) {
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->ch_, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
curl_setopt($this->ch_, CURLOPT_POST, true);
curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
if ($params) {
curl_setopt($this->ch_, CURLOPT_POSTFIELDS, http_build_query($params));
}
$this->body_=$this->Execx();
return $this->Close($this->body_);
}
/**
* @tips: google http head 方法
*/
public function Head($url, array $params = array()) {
$this->Start($url);
curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 0);
curl_setOpt($this->ch_,CURLOPT_NOBODY, true);
$this->body_=$this->Execx();
return $this->Close($this->body_);
}
/**
* @执行CURL会话
*/
public function Execx(){
return curl_exec($this->ch_);
}
/**
* @关闭CURL句柄
*/
public function Close($body_){
if ($body_ === false) {
echo "CURL Error: " . curl_error($body_);
return false;
}
curl_close($this->ch_);
return $body_;
}
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
php图像处理类实例
Jul 28 #PHP
图文介绍PHP添加Redis模块及连接
Jul 28 #PHP
PHP生成树的方法
Jul 28 #PHP
php计算税后工资的方法
Jul 28 #PHP
怎样搭建PHP开发环境
Jul 28 #PHP
php递归实现无限分类的方法
Jul 28 #PHP
php类自动加载器实现方法
Jul 28 #PHP
You might like
星际原理概述
2020/03/04 星际争霸
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
微信小程序文章详情页面实现代码
2018/09/10 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
Django的信号机制详解
2017/05/05 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
如何利用python 读取配置文件
2021/01/06 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
教师廉洁自律承诺书
2014/05/26 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js