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 相关文章推荐
PHP的单引号和双引号 字符串效率
May 27 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
php除数取整示例
Apr 24 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
PHP调用三种数据库的方法(1)
2006/10/09 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
用js生产批量批处理执行命令
2008/07/28 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
西部世纪面试题
2014/12/05 面试题
幼儿园园长自我鉴定
2013/10/22 职场文书
酒店保洁主管岗位职责
2013/11/28 职场文书
2015年三万活动总结
2015/03/25 职场文书
党员转正党支部意见
2015/06/02 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
浅析Python中的套接字编程
2021/06/22 Python
使用springMVC所需要的pom配置
2021/09/15 Java/Android