基于Yii框架实现的封装请求类过程及代码是怎样的
Admin 2022-06-21 群英技术资讯 353 次浏览
本文实例讲述了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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php短连接的介绍:1、短连接一般只在client和server之间传达读写操作,短连接管理简单,存在的连接是有用的连接,不需要额外的控制手段。2、操作步骤,建立连接、数据传输、关闭连接。
本文实例讲述了变量的使用和字符串操作,具体实例如下,分享给大家供大家参考,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
本文实例讲述了Laravel5.1 框架文件管理操作。分享给大家供大家参考,具体如下:Laravel提供了一套很好用的文件系统 方便于管理文件夹和文件,支持Amazon S3和Rackspace云存储等驱动。
今天小编就为大家分享一篇关于PHP chunk_split()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
位运算符允许对整型数中指定的位进行求值和操作。位运算符例子名称结果$a&$bAnd(按位与)将把 $a 和 $b 中都为1的位设为1。$a|$bOr(按位同...
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008