php curl 发送HTTP请求方法支持http、https和文件上传支持自定义header

  • Post author:
  • Post category:php


php curl 发送HTTP请求方法支持http、https

之前从网上找的然后重新封装的函数,这次又需要从之前项目扒出来了,并加了一些注释写个博客以后忘了好找。

/**
 * 发送HTTP请求方法支持https
 * @param string $url 请求URL
 * @param array $params 请求参数  如需传输文件格式为[ 'file' => '@文件地址']
 * @param string $method 请求方法GET/POST
 * @param boolean $multi 是否传输文件
 * @param boolean $curl_opts curlopts设置项
 * @return array  $data   响应数据
 */
function httpRequest($url, $params, $method = 'GET', $header = array(), $multi = false, $curl_opts=[])
{
    $opts = array(
        CURLOPT_TIMEOUT => 3,//设置cURL允许执行的最长秒数。
        CURLOPT_RETURNTRANSFER => 1,//设置返回的内容作为变量储存,而不是直接输出
        CURLOPT_SSL_VERIFYPEER => false,//禁止 cURL 验证对等证书--主要针对https
        CURLOPT_SSL_VERIFYHOST => 0,//设为0表示不检查证书--主要针对https
        CURLOPT_HTTPHEADER => $header//设置header
    );
    /* 根据请求类型设置特定参数 */
    switch (strtoupper($method)) {
        case 'GET':
            $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
            break;
        case 'POST':
            //判断是否传输文件
            $params = $multi ? $params : http_build_query($params);//如果不进行这一步HTTP头会发送Content_type: multipart/form-data (文件上传头部)正确的为Content_type: application/x-www-form-urlencoded
            $opts[CURLOPT_URL] = $url;
            $opts[CURLOPT_POST] = 1;
            $opts[CURLOPT_POSTFIELDS] = $params;
            break;
        default:
            throw new Exception('不支持的请求方式!');
    }
    /* 初始化并执行curl请求 */
    $ch = curl_init();
    foreach ($curl_opts as $k=>$value){
        $opts[$k] = $value;
    }
    curl_setopt_array($ch, $opts);
    $data = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    if ($error) {
        throw new Exception($error);//抛出异常
    }
    $decode_data = json_decode($data, true);
    if ($decode_data === Null) {
        return $data;
    }
    return $decode_data;
}



版权声明:本文为u010454239原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。