PHP对CURL函数的封装,支持GET/POST请求

2017-07-12 18:56:00 3450 5 编辑:SW 来源:技术博客

因为开发需求,经常要写接口各种各样的请求,所以小编封装了CURL的函数,方便下次使用的时候就不用再次手打,直接复制函数调用就可以了,又方便又省事,废话不多说下面是PHP对CURL函数的封装,支持GET/POST请求和证书验证以及错误信息提示。

代码如下

/**

 * curl 函数

 * @param string $url 请求的地址

 * @param string $type POST/GET/post/get

 * @param array $data 要传输的数据

 * @param string $err_msg 可选的错误信息(引用传递)

 * @param int $timeout 超时时间

 * @param array 证书信息

 * @author 勾国印

 */

function GoCurl($url, $type, $data = false, &$err_msg = null, $timeout = 20, $cert_info = array())

{

    $type = strtoupper($type);

    if ($type == 'GET' && is_array($data)) {

        $data = http_build_query($data);

    }


    $option = array();


    if ( $type == 'POST' ) {

        $option[CURLOPT_POST] = 1;

    }

    if ($data) {

        if ($type == 'POST') {

            $option[CURLOPT_POSTFIELDS] = $data;

        } elseif ($type == 'GET') {

            $url = strpos($url, '?') !== false ? $url.'&'.$data :  $url.'?'.$data;

        }

    }


    $option[CURLOPT_URL]            = $url;

    $option[CURLOPT_FOLLOWLOCATION] = TRUE;

    $option[CURLOPT_MAXREDIRS]      = 4;

    $option[CURLOPT_RETURNTRANSFER] = TRUE;

    $option[CURLOPT_TIMEOUT]        = $timeout;


    //设置证书信息

    if(!empty($cert_info) && !empty($cert_info['cert_file'])) {

        $option[CURLOPT_SSLCERT]       = $cert_info['cert_file'];

        $option[CURLOPT_SSLCERTPASSWD] = $cert_info['cert_pass'];

        $option[CURLOPT_SSLCERTTYPE]   = $cert_info['cert_type'];

    }


    //设置CA

    if(!empty($cert_info['ca_file'])) {

        // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。1需要设置CURLOPT_CAINFO

        $option[CURLOPT_SSL_VERIFYPEER] = 1;

        $option[CURLOPT_CAINFO] = $cert_info['ca_file'];

    } else {

        // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。1需要设置CURLOPT_CAINFO

        $option[CURLOPT_SSL_VERIFYPEER] = 0;

    }


    $ch = curl_init();

    curl_setopt_array($ch, $option);

    $response = curl_exec($ch);

    $curl_no  = curl_errno($ch);

    $curl_err = curl_error($ch);

    curl_close($ch);


    // error_log

    if($curl_no > 0) {

        if($err_msg !== null) {

            $err_msg = '('.$curl_no.')'.$curl_err;

        }

    }

    return $response;

}


使用方法如下:

$url   = '请求地址';

$data = array(

            'phoneNum' => '18614064456',

        );

$json = GoCurl($url, $data, 'POST', $error_msg);


$array = json_decode($json, true);


print_r($array);


本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
关注深正互联

15

技术从业经验

多一份方案,会有收获...

联系深正互联,免费获得专属《策划方案》及报价

在线咨询
微信交谈
拒绝骚扰,我们只想为给您带来一些惊喜...
多一份免费策划方案,总有益处。

请直接添加技术总监微信联系咨询

深正互联微信
扫描即可沟通