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

2025-05-27 0 30

本文实例讲述了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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP封装请求类实例分析【基于Yii框架】 https://www.kuaiidc.com/70975.html

相关文章

发表评论
暂无评论