gpt4 book ai didi

PHP封装请求类实例分析【基于Yii框架】

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP封装请求类实例分析【基于Yii框架】由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了PHP封装请求类。分享给大家供大家参考,具体如下:

1.源码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?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差不多(初始化执行关闭) 选项也差不多  就是在方式上面会有些差别! 。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助.

原文链接:https://blog.csdn.net/fujian9544/article/details/90578593 。

最后此篇关于PHP封装请求类实例分析【基于Yii框架】的文章就讲到这里了,如果你想了解更多关于PHP封装请求类实例分析【基于Yii框架】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com