php curl方法封装
/**
* @desc 获取设备的监控项实时值
*
* @return url请求地址
* @return method 请求方法(POST,GET,PUT)等
* @return postfields 上传值
* @return ssl 是否开启https
* @return headers 请求头部信息
*/
public function requestGet($url,$method="POST", $postfields = null, $ssl=false, $headers=array()){
# curl完成初始化
$curl = curl_init();
# curl 选项设置
curl_setopt($curl, CURLOPT_URL, $url); //需要获取的URL地址 $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'; switch ($method) {
case "POST":
curl_setopt($curl, CURLOPT_POST, true);
if (!empty($postfields)) {
$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
curl_setopt($curl, CURLOPT_POSTFIELDS, $tmpdatastr);
}
break;
case "PUT" :
curl_setopt ($curl, CURLOPT_CUSTOMREQUEST, "PUT");
$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
curl_setopt($curl, CURLOPT_POSTFIELDS,$tmpdatastr);
break;
default:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求方式 */
break;
} curl_setopt($curl, CURLOPT_USERAGENT, $user_agent); # 在HTTP请求中包含一个"User-Agent: "头的字符串,声明用什么浏览器来打开目标网页 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); # TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。 curl_setopt($curl, CURLOPT_AUTOREFERER, true); # TRUE 时将根据 Location: 重定向时,自动设置 header 中的Referer:信息。 curl_setopt($curl, CURLOPT_TIMEOUT, 30); # 设置超时时间 curl_setopt($curl, CURLOPT_ENCODING, '');
# HTTP请求头中"Accept-Encoding: "的值。 这使得能够解码响应的内容。 支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",会发送所有支持的编码类型 if($headers) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); # 设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
} # SSL相关,https需开启
if ($ssl) {
curl_setopt($curl, CURLOPT_CAINFO, '/cert/ca.crt'); # CA 证书地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); # 禁用后cURL将终止从服务端进行验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
# 设置为 1 是检查服务器SSL证书中是否存在一个公用名;设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配;0 为不检查名称。 在生产环境中,这个值应该是 2(默认值)。
# 公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)
}else {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); # 禁用后cURL将终止从服务端进行验证,默认为 true
} curl_setopt($curl, CURLOPT_HEADER, false); # 是否处理响应头,启用时会将头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); # TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。 # 执行 curl 会话
$response = curl_exec($curl); if (false === $response) {
echo '<br>', curl_error($curl), '<br>';
return false;
} #关闭 curl会话
curl_close($curl);
// file_put_contents('hhh.log', var_export($response,true),FILE_APPEND);
return $response;
}
php curl方法封装的更多相关文章
- C#常用字符串加解密方法封装
C#中常用的字符串加密.解密方法封装,包含只加密但不解密的方法.收藏起来备用. //方法一 //须添加对System.Web的引用 //using System.Web.Security; /// & ...
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
- C#方法封装与重构
C#作为一个完全面向对象的语言,有个特性很重要但是往往会不重视,而不重视的结果就会造成代码杂乱难以解读.维护.这个特性就是封装. 这里不是大谈C#的封装,我只讲一个,关于方法封装的一些问题. ...
- 基于promise对小程序http请求方法封装
原因是我不想每次请求都复制粘贴那么长的请求地址,所以我把前边那一坨请求地址作为基础地址,只传后台给的路由就ok,而且,并不是每次请求都要显示正在加载,这对小程序体验很差,所以,我加了个形参,用来判断是 ...
- AJAX原理解析与兼容方法封装
AJAX常用参数 AJAX对象兼容 AJAX对象方法与属性 AJAX封装兼容方法源码 AJAX全称Asynchronous JavaScript and XML(异步的JavaScript与XML), ...
- 微信access_token请求之简单缓存方法封装
还有东西要搞,就直接上代码 function.php <?php // 一个好玩的 curl 类 // https://github.com/metowolf/Meting/blob/maste ...
- 通用ajax请求方法封装,兼容主流浏览器
ajax简单介绍 没有AJAX会怎么样?普通的ASP.Net每次运行服务端方法的时候都要刷新当前页面. 假设没有AJAX,在youku看视频的过程中假设点击了"顶.踩".评论.评论 ...
- appium安卓自动化的 常用driver方法封装
appium安卓自动化的 常用driver方法封装 做安卓自动化的时候,很多方法写起来会造成代码冗余,把这部分封装起来 ,添加到androidUI工具类里,随时可调用 都放在这个类下面: @Compo ...
- 【前端学习笔记04】JavaScript数据通信Ajax方法封装
//Ajax 方法封装 //设置数据格式 function setData(data){ if(!data){ return ''; } else{ var arr = []; for(k in da ...
- appium+python自动化24-滑动方法封装(swipe)
swipe介绍 1.查看源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快.默认为None可不填,一般设置500-1000毫秒比较合适. swipe(self, ...
随机推荐
- jmeter常见错误(持续更新)
1. jmeter java.net.NoRouteToHostException: Cannot assign requested address (Address not available) 压 ...
- js获取时间戳的方法
js获取时间戳的方法 转载脚本之家: https://www.jb51.net/article/77066.htm 转载博客园八英里: https://www.cnblogs.com/deepalle ...
- 如何获取win10用户最高权限
第五步,在(输入对象名称)方框中输入"System Managed Accounts Group",再点击"检查名称" 转载: 百度经验: https: ...
- video多视频轮播Swiper 播放视频不轮播不循环
在实际工作中经常会遇到swiper轮播多个视频,播放视频不轮播不循环 loop:true下问题: (1)slides前后会复制若干个slide,成一个环路,不会复制绑定在dom上@click事件, 解 ...
- Python 01-Unittest的使用 unittest简单应用
class TestCase01(unittest.TestCase): def setUp(self): print("用例开始") def te ...
- tdlib成功编译版本20230205(java)
tdjni是java本地调用接口dll文件夹下的三个动态链接是供tdjni调用的使用时这三个加到系统环境变量里 编译文件在本人的文件里,可以下载
- datagridview 标题设置背景图片
private void dgvCaozuoList_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e. ...
- JDBC:实现Java与数据库的连接
先了解重要的编程思想:ORM(object relational mapping) 即将数据库与JAVA的类一一映射(对应) 一个数据表对应一个Java类 表中的一条记录对应Java类的一个对象 表中 ...
- MySQL查询 根据时间字段的值的时分秒进行查询
例如,查询小于等于10:30的时间 SELECT * FROM 表名WHERE DATE_FORMAT(TranslateOverTime,'%H') <= 10 AND DATE_FORMA ...
- PHP面向对象(三)
对象的引用 代码如下: <?php//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写 class NbaPlayer{ public $name = & ...