php发送请求curl实现get、post、put、delete、patch请求

利用curl实现get、post、put、delete、patch请求
<?php


/**
 * Class Curl
 * 利用curl实现get、post、put、delete、patch请求
 */

class Curl
{

    /**
     * 发送post请求
     * @param $url
     * @param $data
     * @param $header
     * @param string $method
     * @param string $type
     * @return array
     */
    public function curlData($url, $data, $header, $method = 'get', $type = 'json')
    {
        $ch = curl_init();
        if ($type == 'json') {
            $headers = ['Content-Type:application/json'];
        } elseif ($type == 'form') {
            $headers = ['Content-Type:multipart/form-data'];
        }else{
            $headers = ['Content-Type:application/x-www-form-urlencoded'];
        }
        $headers = array_merge($headers, $header);

        if ($method == 'GET' && !empty($data)) {
            if ($type != 'json') {
                $querystring = http_build_query($data);
                $url = $url . '?' . $querystring;
            } else {
                $url = $url . '?' . $this->arrToStr($data);
            }
        }

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        curl_setopt($ch, CURLINFO_HEADER_OUT, true);

        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行后不直接打印出来
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);

        switch ($method) {
            case 'post':
                curl_setopt($ch, CURLOPT_POST, 1); // post提交
                if ($type == 'json') {
                    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); // 请求方式
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post的变量
                } elseif($type == 'form') {
                    //$new_data['data'] = $data;
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post的变量
                }else{
                    $querystring = http_build_query($data);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $querystring); // post的变量
                }
                break;
            case 'put':
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                break;
            case 'delete':
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                break;
            default:
                curl_setopt($ch, CURLOPT_HTTPGET, true);
                break;
        }
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        //curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器

        if (!empty($cookie)) {
            curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        }
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不从证书中检查SSL加密算法是否存在

        $output = curl_exec($ch);
        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        //echo curl_getinfo($ch, CURLINFO_HEADER_OUT);

        curl_close($ch);

        return array('err_code' => $return_code, 'data' => $output);
    }

    public function arrToStr($data = [])
    {
        ksort($data);
        $str = '';
        foreach ($data as $key => $item) {
            $str .= $key . '=' . $item . '&';
        }
        $str = substr($str, 0, strlen($str) - 1);
        return $str;
    }
}

Guess you like

Origin blog.csdn.net/weixin_31501115/article/details/118226362