PHP——CURL方法集合

<?php
/**
 * @param array $option ['url'=>'请求地址','header'=>'请求头(格式:['Content-type: text/plain', 'Content-length: 100'])','method'=>'请求方法(默认POST)','data'=>'请求数据(格式:[key=>value])','cookies'=>'设定 HTTP 请求中"Cookie(格式:[key=>value])','timeout'=>'超时时间(默认60秒)','userPwd'=>'传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"','sslPath'=>'证书地址','debug'=>'是否启动调试信息(默认false)']
 * @return mixed
 */
function curl(array $option = [])
{
    if (!isset($option['url'])) {
        return false;
    }

    $url = $option['url'];
    $method = isset($option['method']) ? $option['method'] : 'POST';
    $data = isset($option['data']) ? $option['data'] : [];


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_TIMEOUT, isset($option['timeout']) ? (int)$option['timeout'] : 60); //设置超时 默认60秒

    if (isset($option['sslPath']) && file_exists($option['sslPath'])) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);//要验证证书
        curl_setopt($ch, CURLOPT_CAINFO, $option['sslPath']);//证书地址
    } else {
        //跳过SSL证书检查。
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //从证书中检查SSL加密算法是否存在
    }

    if (isset($option['userPwd'])) {
        curl_setopt($ch, CURLOPT_USERPWD, $option['userPwd']); //传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"
    }

    if (isset($option['cookies']) && is_array($option['cookies'])) {
        $cookieString = '';
        foreach ($option['cookies'] as $name => $value) {
            $value = trim($value);
            $cookieString .= $name . '=' . $value . '; ';
        }
        curl_setopt($ch, CURLOPT_COOKIE, $cookieString); //设定 HTTP 请求中"Cookie: "部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
    }

    switch (strtoupper($method)) {
        case "GET" :
            curl_setopt($ch, CURLOPT_HTTPGET, true);

            if (is_array($data)) $data = http_build_query($data);

            if (strstr($url, '?') !== false)
                $url = $url . '&' . $data;
            else
                $url = $url . '?' . $data;

            break;
        case "POST":
            curl_setopt($ch, CURLOPT_POST, true);//POST提交
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//POST值
            //全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
            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;
    }

    curl_setopt($ch, CURLOPT_URL, $url);//请求URL

    if (isset($option['header']) && is_array($option['header'])) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $option['header']);//请求头 格式:['Content-type: text/plain', 'Content-length: 100'] 
    }


    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出。
    if (isset($option['debug']) && $option['debug']) {
        echo '<pre>';
        curl_setopt($ch, CURLOPT_VERBOSE, 1); //启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。
        curl_setopt($ch, CURLINFO_HEADER_OUT, true); //启用时追踪句柄的请求字符串。
        curl_setopt($ch, CURLOPT_HEADER, true); //启用时会将头文件的信息作为数据流输出。
        $httpCode = curl_getinfo($ch);
        var_export($httpCode);
        echo PHP_EOL . PHP_EOL . PHP_EOL;
    } else {
        curl_setopt($ch, CURLOPT_HEADER, false); //不将头文件的信息作为数据流输出。
    }

    $response = curl_exec($ch);//CURLOPT_RETURNTRANSFER 不设置  curl_exec返回TRUE 设置  curl_exec返回json(此处) 失败都返回FALSE
    curl_close($ch);
    return $response;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值