PHP封装请求类实例分析【基于Yii框架】
时间:2022-07-27
本文章向大家介绍PHP封装请求类实例分析【基于Yii框架】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了PHP封装请求类。分享给大家供大家参考,具体如下:
1.源码
<?php
namespace appcommoncomponents;
use Yii;
use appcommonservicesBaseService;
class HttpClient extends BaseService{
private static $headers = [];
private static $cookie = null;
public static function get($url, $param =[]) {
return self::curl($url, $param,"get");
}
public static function post($url, $param,$extra = [] ) {
return self::curl($url, $param,"post");
}
protected static function curl($url, $param, $method = 'post')
{
$calculate_time1 = microtime(true);
// 初始华
$curl = curl_init();
// 设置url
curl_setopt($curl, CURLOPT_URL, $url);
// 设置为0表示不返回HTTP头部信息
curl_setopt($curl, CURLOPT_HEADER, 0);
// 设置为1返回将curl_exec()获取的信息以字符串返回,而不是直接输出 设置为0返回true/false
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// TRUE 将在安全传输时输出 SSL 证书信息到 STDERR。
curl_setopt($curl, CURLOPT_CERTINFO , true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// FALSE 禁止 cURL 验证对等证书
// 交换证书可以在 CURLOPT_CAINFO 选项中设置,CURLOPT_CAPATH中设置证书目录。
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
if( isset( Yii::$app- params['curl'] ) && isset(Yii::$app- params['curl']['timeout']) ){
curl_setopt($curl, CURLOPT_TIMEOUT, Yii::$app- params['curl']['timeout']);
}else{
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
}
// array_key_exists — 检查数组里是否有指定的键名或索引
// CURLOPT_USERAGENT在HTTP请求中包含一个"User-Agent: "头的字符串
if(array_key_exists("HTTP_USER_AGENT",$_SERVER)){
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
}
// CURLOPT_HTTPHEADER设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
if(!empty(self::$headers)){
$headerArr = [];
foreach( self::$headers as $n = $v ) {
$headerArr[] = $n .': ' . $v;
}
curl_setopt ($curl, CURLOPT_HTTPHEADER , $headerArr ); //构造IP
}
// CURLOPT_COOKIE设定 HTTP 请求中"Cookie: "部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
if( self::$cookie ){
curl_setopt($curl, CURLOPT_COOKIE, self::$cookie);
}
// post处理 :TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
if ($method == 'post')
{
curl_setopt($curl, CURLOPT_POST, TRUE);
// 如果为数组就变成字符串
if(is_array($param)){
$param = http_build_query($param);
}
// 全部数据使用HTTP协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
}else{
//get请求
curl_setopt($curl, CURLOPT_POST, FALSE);
}
// 执行输出
$info = curl_exec($curl);
//log:返回最后一次的错误代码
$_errno = curl_errno($curl);
$_error = '';
if($_errno)
{
// 返回当前会话最后一次错误的字符串
$_error = curl_error($curl);
}
curl_close($curl);
// 花费的时间
$calculate_time_span = microtime(true) - $calculate_time1;
$log = Yii::$app- getRuntimePath().DIRECTORY_SEPARATOR.'curl.log';
// int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
file_put_contents($log,date('Y-m-d H:i:s')." [ time:{$calculate_time_span} ] url: {$url} nmethod: {$method} ndata: ".json_encode($param)." nresult: {$info} nerrorno: {$_errno} error: {$_error} n",FILE_APPEND);
if( $_error ){
return self::_err( $_error );
}
return $info;
}
public static function setHeader($header){
self::$headers = $header;
}
public static function setCookie( $cookie ){
self::$cookie = $cookie;
}
}
2.分析
microtime() 函数返回当前 Unix 时间戳的微秒数。 当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串。默认为 FALSE。
详细的各种分析写在代码里面了
3.总结
总结就是get与post差不多(初始化执行关闭) 选项也差不多 就是在方式上面会有些差别!
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
- JavaScript闭包详解
- Spark你一定学得会(一)No.7
- iOS 滚动视图的复用问题解决方案
- 二叉排序树(BSTree)关于查找算法结合
- 使用ES6新特性开发微信小程序(5)——内建对象的变化
- 弗洛伊德(Floyd)算法
- 迪杰斯特拉(Dijkstra)算法求图中最短路径
- 微信小程序实例-摇一摇抽奖
- 普利姆(prim)算法和克鲁斯卡尔(kruskal)算法
- android Handler机制之ThreadLocal详解
- 图(Graph)的常用代码集合
- 我差不多,哦不我已经是个废人了No.4
- 将Gradle项目发布到Jcenter和Maven Central
- FLAnimatedImage -ios gif图片加载框架介绍
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- PHP实现唤起微信支付功能
- PHP封装的mysqli数据库操作类示例
- PHP-FPM 的管理和配置详解
- PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
- 实例讲解PHP表单验证功能
- python如何从键盘获取输入实例
- 使用Keras实现Tensor的相乘和相加代码
- php无限级分类实现评论及回复功能
- php获取手机端的号码以及ip地址实例代码
- PHP数组遍历的几种常见方式总结
- 详解php协程知识点
- php curl简单采集图片生成base64编码(并附curl函数参数说明)
- PHP通过get方法获得form表单数据方法总结
- PHP filesize函数用法浅析
- PHP中创建和编辑Excel表格的方法