php实现http请求类

首先了解一下php的curl

<?php
// 初始化 cURL 会话
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);
?>

封装成Http类:

<?php

class Http {
    
//$url 请求地址 $data:请求参数 $http_opts :curl_setopt()参数
    public function put( $url, $data, $http_opts = null ) {

        if (!isset($url) || empty($url)) {
            return array( 'code' => 400, 'message' => '缺少请求链接' );
        }
        if (!isset($data) || empty($data)) {
            return array( 'code' => 400 ,'message' => '缺少请求参数');
        }
        if (is_array($data)) {
            $data = http_build_query($data);
        }

        $curl_handler = curl_init();

        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CONNECTTIMEOUT => 15,
            CURLOPT_HEADER => false,
            CURLOPT_USERAGENT => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
            CURLOPT_POST => TRUE,
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_CUSTOMREQUEST => 'PUT',
            CURLOPT_HTTPHEADER => array('Content-Length: ' . strlen($data))
        );

        if (is_array($http_opts)) {
            foreach ($http_opts as $key => $value){
                $options[$key] = $value;
            }
        }

        curl_setopt_array($curl_handler, $options);
        $curl_result = curl_exec($curl_handler);
        $curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE);
        $curl_http_info = curl_getinfo($curl_handler);
        if ($curl_result == false) {
            $error = curl_error($curl_handler);
            curl_close($curl_handler);
            return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
        }
        curl_close($curl_handler);

        $encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5'));
        if ($encode != 'UTF-8') {
            $curl_result = iconv($encode, 'UTF-8', $curl_result);
        }

        $result = json_decode($curl_result, true);
        if (is_null($result)) {
            $result = $curl_result;
        }

        return array('code' => 200, 'message' => 'ok', 'data' => $result,'http_info' => $curl_http_info);

    }

    public function post( $url, $data, $http_opts = null ) {

        if (!isset($url) || empty($url)) {
            return array( 'code' => 400, 'message' => '缺少请求链接' );
        }
        if (!isset($data)) {
            return array( 'code' => 400 ,'message' => '缺少请求参数');
        }

        //解析链接,判断请求协议
        //$parse_url_array = parse_url($url);

        $curl_handler = curl_init(); //初始化一个curl对象

        $options = array(
            // PHP取回的URL地址。可以在用curl_init()函数初始化时设置这个选项
            CURLOPT_URL => $url,
            // 在启用CURLOPT_RETURNTRANSFER时候将获取数据返回
            CURLOPT_RETURNTRANSFER => 1,
            //最大延迟秒数
            CURLOPT_CONNECTTIMEOUT => 15,
            // 把一个头包含在输出中,设置这个选项为一个非零值。
            CURLOPT_HEADER	 => false,
            // 在HTTP请求中包含一个”user-agent”头的字符串
            CURLOPT_USERAGENT => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
            // 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
            CURLOPT_POST => TRUE,
            // 传递一个作为HTTP “POST”操作的所有数据的字符串。
            CURLOPT_POSTFIELDS => $data
        );
        /*if ($parse_url_array['scheme'] == 'https') {
            $options[CURLOPT_SSL_VERIFYPEER] = 0;
            $options[CURLOPT_SSL_VERIFYHOST] = 0;
            $options[CURLOPT_SSLVERSION] = 3;
        }*/

        if (is_array($http_opts)) {
            // 接口参数
            foreach ($http_opts as $key => $value) {
                $options[$key] = $value;
            }
        }

        curl_setopt_array($curl_handler, $options);
        // 运行cURL,请求网页获取URL站点内容 
        $curl_result = curl_exec($curl_handler); 
        //获取最后一次收到的HTTP状态码
        $curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE); 
        $curl_http_info = curl_getinfo($curl_handler);

        if ($curl_result == false) {
            $error = curl_error($curl_handler);
            curl_close($curl_handler);
            return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
        }
        curl_close($curl_handler); // 关闭一个curl会话
        //自动获取字符串编码函数
        $encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5')); //进行编码识别
        if ($encode != 'UTF-8') {
            $curl_result = iconv($encode, 'UTF-8', $curl_result);
        }

        $result = json_decode($curl_result, true);

        if (is_null($result)) {
            $result = $curl_result;
        }

        return array('code' => $curl_http_status, 'message' => 'ok', 'data' => $result,'http_info' => $curl_http_info);
    }

    public function get( $url, $http_opts = null, $is_transcoding = true ) {

        if (!isset($url) || empty($url)) {
            return array( 'code' => 400, 'message' => '缺少请求链接' );
        }

        $curl_handler = curl_init();
        // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
        $options = array(
            CURLOPT_URL             => $url,  // 请求地址
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CONNECTTIMEOUT  => 15,
            CURLOPT_HEADER			=> false,
            // CURLOPT_SSL_VERIFYPEER => false,
            // CURLOPT_SSL_VERIFYPEER =>  false,
            // CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_USERAGENT       => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
        );

        /*if ($parse_url_array['scheme'] == 'https') {
            $options[CURLOPT_SSL_VERIFYPEER] = 0;
            $options[CURLOPT_SSL_VERIFYHOST] = 0;
            $options[CURLOPT_SSLVERSION] = 3;
        }*/

        if (is_array($http_opts)) {
            foreach ($http_opts as $key => $value){
                $options[$key] = $value;
            }
        }
        
        curl_setopt_array($curl_handler, $options);
        $curl_result = curl_exec($curl_handler);
        $curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE);
        $curl_http_info = curl_getinfo($curl_handler);
        if ($curl_result === false) {
            $error = curl_error($curl_handler);
            curl_close($curl_handler);
            return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);

        }
        if ($is_transcoding) {
            $encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5'));
            if ($encode != 'UTF-8') {
                $curl_result = iconv($encode, 'UTF-8', $curl_result);
            }
        }

        $result = json_decode($curl_result,true);
        if (is_null($result) || empty($result)) {
            $result = $curl_result;
        }

        curl_close($curl_handler);
        
        return array('code' => $curl_http_status, 'data' => $result,'http_info' => $curl_http_info);
    }

    public function delete($url, $opt = null) {
        if (!isset($url) || empty($url)) {
            return array('code' => 400, 'message' => '缺少请求链接');
        }
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, $url);
        curl_setopt($curl_handle, CURLOPT_FILETIME, true);
        curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);


        curl_setopt($curl_handle, CURLOPT_HEADER, true);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
        curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'DELETE');

        $options = [];
        if (is_array($opt)) {
            foreach ($opt as $key => $value) {
                $options[$key] = $value;
            }
        }
        curl_setopt_array($curl_handle, $options);
        
        $curl_result = curl_exec ( $curl_handle );
        $curl_http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
        $curl_http_info = curl_getinfo($curl_handle);
        if ($curl_result === false) {
            $error = curl_error($curl_handle);
            curl_close($curl_handle);
            return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
        }
        $encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
        if ($encode != 'UTF-8') {
            $curl_result = iconv($encode, 'UTF-8', $curl_result);
        }
        $result = json_decode($curl_result, true);
        if (is_null($result) || empty($result)) {
            $result = $curl_result;
        }
        curl_close($curl_handle);
        return array('code' => $curl_http_status, 'data' => $result,'http_info' => $curl_http_info);
    }

}

发送请求类

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值