基于Yii框架实现的封装请求类过程及代码是怎样的
Admin 2022-06-21 群英技术资讯 1282 次浏览
这篇文章给大家介绍了“基于Yii框架实现的封装请求类过程及代码是怎样的”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。本文实例讲述了PHP封装请求类。分享给大家供大家参考,具体如下:
1.源码
<?php
namespace app\common\components;
use Yii;
use app\common\services\BaseService;
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差不多(初始化执行关闭) 选项也差不多 就是在方式上面会有些差别!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
简介检测一个类是否可以使用 foreach 进行遍历的接口。无法被单独实现的基本抽象接口。相反它必须由 IteratorAggregate 或 Iterator 接口实现。Note:实现此接口...
为了防止用户利用机器人自动注册、登录、灌水,现在的网站一般都采用了验证码技术,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
这篇文章给大家分享的是有关php复选框的内容,对于复选框checkbox,我们比较常见的应用就是php表单提交,那么我们是如何判断复选框中的值是否被选中的呢?下面就给大家分享一下php复选框的实现。
integer类型就是集合Z={...,-2,-1,0,1,2,...}中的一个数字。integer可以已10进制,8进制,16进制表示。用八进制表示的时候,数字需要已0(零)开头;用十六进制表示的时候,数字需要已0x(零x)或者0X(零大写X)开头; integer溢出:integer溢出的时候,会自动的转化为float类型。同样的,如果integer类型的
php Mhash算法的加密:1、Mhash提供了一个非常方便的 Salted S2K 算法可以用来方便地生成一套非常方便地密码加密内容。2、有salt参数,并且可以指定返回的数据长度。返回的也是二进制的数据。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008