枯痕个人博客
立即登录 马上注册
当前位置: 大后端 > PHP > 简单Curl 封装

场景:因各个子系统需与用户中心互相交互

解决方案1:第一个版本确定使用RPC作为通信基础,后期封装控制器内部问题暂时代码不纰漏

解决方案2:基于原始curl,临时方案!

因为每次都要发起请求,肯定要封装一波,不可能每次都去写一遍,so ……

 

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
/**
 * Created by IntelliJ IDEA.
 * User: Bughu
 * Date: 2020/12/9
 * Time: 9:53
 */
class Curl
{

    protected static $url = ''; // 访问的url 用户中心开发环境
    private static $sendUrl = '';
    private static $oriUrl = ''; // referer url
    private static $data = []; // 可能发出的数据 post,put
    private static $method; // 访问方式,默认是GET请求
    private static $headers = []; //请求参数头部信息
    private static $token; //用户token
    private static $product_identification; //产品标识


    public static function send($url, $method = 'get', $data = [])
    {
        if (!$url) {
            return api_wrong_return(Constants::PROGRAM_ERROR, 'URL不可为空!');
        }
        self::$url = Yii::$app-&gt;params['userCenter'];
        self::$sendUrl = self::$url . $url;
        self::$method = strtolower($method);
        $urlArr = parse_url(self::$url);
        self::$oriUrl = $urlArr['scheme'] . '://' . $urlArr['host'];
        self::$data = $data;
        $func = self::$method . 'Request';
        $data = self::$func(self::$sendUrl);
        return isset($data['code']) ? $data : api_wrong_return(Constants::PROGRAM_ERROR, '中转失败!', $data);
    }

    /**
     * 无需要鉴权交互
     *
     * @param  $url
     * @param  string $method
     * @param  array  $data
     * @param  bool   $auth
     * @return array
     */
    public static function noAuthSend($url, $method = 'get', $data = [])
    {
        self::$url = Yii::$app-&gt;params['userCenter'];
        self::$sendUrl = self::$url . $url;
        self::$method = strtolower($method);
        $urlArr = parse_url(self::$url);
        self::$oriUrl = $urlArr['scheme'] . '://' . $urlArr['host'];
        self::$data = $data;

        $func = self::$method . 'Request';
        $data = self::$func(self::$sendUrl);
        $BaseJob = new BaseJob();
        $BaseJob-&gt;ll(['result' =&gt; $data], 'noAuthUCenter.log', 'uCenter');
        return isset($data['code']) ? $data : api_wrong_return(Constants::PROGRAM_ERROR, '中转失败!', $data);
    }


    /**
     * 基础发起curl请求
     *
     * @param  int $is_post
     * @return array|mixed
     * @throws Exception
     */
    private static function doRequest($is_post = 0)
    {
        try {
            $ch = curl_init();//初始化curl
            if ($is_post == 0) {
                self::$sendUrl = self::$sendUrl . '?' . self::dealPostData(self::$data);
            }
            curl_setopt($ch, CURLOPT_URL, self::$sendUrl);//抓取指定网页
            if (!empty(self::$headers)) {
                curl_setopt($ch, CURLOPT_HTTPHEADER, self::$headers);
            }
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);// 来源一定要设置成来自本站
            curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

            if ($is_post == 1) {
                curl_setopt($ch, CURLOPT_POST, $is_post);
                //post提交方式
                if (!empty(self::$data)) {
                    curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);
                }
            }
            // 跳过证书检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            // 不从证书中检查SSL加密算法是否存在
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

            $data = curl_exec($ch);//运行curl
            curl_close($ch);
        } catch (\Exception $e) {
            return $e-&gt;getMessage();
        }
        $datas = json_decode($data, true);
        return isset($datas['code']) ? $datas : $data;
    }

    /**
     * 发起get请求
     */
    public static function getRequest()
    {
        return self::doRequest(0);
    }

    /**
     * 发起post请求
     */
    public static function postRequest()
    {
        return self::doRequest(1);
    }


    /**
     * 处理发起非get请求的传输数据
     *
     * @param  $postData
     * @return false|string
     */
    public static function dealPostData($postData)
    {
        if (!is_array($postData)) {
            return api_wrong_return(Constants::PROGRAM_ERROR, 'POST请求参数必须为数组!');
        }
        $o = '';
        foreach ($postData as $k =&gt; $v) {
            $o .= "$k=" . urlencode($v) . "&amp;";
        }
        $postData = substr($o, 0, -1);
        return $postData;
    }

    /**
     * 发起put请求
     */
    public static function putRequest($param)
    {
        return self::doRequest(2);
    }

    /**
     * 发起delete请求
     */
    public static function deleteRequest($param)
    {
        return self::doRequest(3);
    }

}

 

很多瑕疵,仅此记录,有能力的小伙伴可以提出质疑,共同成长哦!

资源:
curl

 

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

赞(2) 打赏
欢迎打赏您的小可爱~~~~

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"简单Curl 封装"

最新评论

    暂无留言哦~~

博客简介

枯痕个人博客: xiaole.biz,一个关注Web后端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的后端博客,期待您的参与。

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 105 篇
  • 草稿数目: 1 篇
  • 分类数目: 26 个
  • 独立页面: 4 个
  • 评论总数: 9 条
  • 链接总数: 5 个
  • 标签总数: 169 个
  • 注册用户: 8 人
  • 访问总量: 8,756,207 次
  • 最近更新: 2021年7月23日
服务热线:
 156144**650

 QQ在线交流

 旺旺在线