PHP封装请求类实例分析【基于Yii框架】
发布:smiling 来源: PHP粉丝网 添加日期:2022-01-08 16:04:39 浏览: 评论:0
这篇文章主要介绍了PHP封装请求类,结合实例形式分析了基于Yii框架的curl封装请求处理的相关实现技巧,需要的朋友可以参考下。
本文实例讲述了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(!emptyempty(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差不多(初始化执行关闭) 选项也差不多 就是在方式上面会有些差别!
Tags: PHP封装请求类 Yii框架
相关文章
- ·深入讲解PHP的Yii框架中的属性(Property)(2021-07-18)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)