http请求方法封装

<?php
/**
  * Class Curl  curl简单封装 get post
  */
class Curl
{
 
     /**
      * @brief                  get请求
      * @param $url             请求的url
      * @param array $param     请求的参数
      * @param array $header    头部数据
      * @param int $timeout     超时时间
      * @param int $followAction 是否允许被抓取的链接跳转
      * @param int $gzip         是否启用gzip压缩
      * @param string $format    格式
      * @param int $log       是否启用日志
      * @return mixed
      */
     public static function get( $url , $param = array (), $header = array (), $timeout = 3, $followAction = 0, $gzip = 0, $format = 'html' , $log =0)
     {
         $ch = curl_init();
         if ( is_array ( $param )) {
             $url = $url . '?' . http_build_query( $param );
         }
         curl_setopt( $ch , CURLOPT_URL, $url );
         curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
         curl_setopt( $ch , CURLOPT_HEADER, 0);
         curl_setopt( $ch , CURLOPT_TIMEOUT, $timeout );
         curl_setopt( $ch , CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" );
         if ( $followAction ) {
             curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1); //允许被抓取的链接跳转
         }
         if ( $gzip ) {
             curl_setopt( $ch , CURLOPT_HTTPHEADER, array ( 'Accept-Encoding: gzip, deflate' ));
             curl_setopt( $ch , CURLOPT_ENCODING, 'gzip,deflate' );
         }
         //curl_setopt($ch, CURLOPT_REFERER, '');
         $data = curl_exec( $ch );
         if ( $format == 'json' ) {
             $data = json_decode( $data , true);
         }
 
         if ( $log ){
             if ( $format == 'html' ){
                 self::_logCurlInfo( $ch , $param , '' );
             } else {
                 self::_logCurlInfo( $ch , $param , $data );
             }
         }
         curl_close( $ch );
         return $data ;
     }
 
     /**
      * @brief                   post请求
      * @param $url              请求的url地址
      * @param array $param      请求的参数
      * @param array $header     http头
      * @param int $ssl          是否启用ssl
      * @param string $format    返回的格式
      * @param int $log          是否启用日志
      * @return mixed
      */
     public static function post( $url , $param = array (), $header = array (), $ssl = 0, $format = 'json' , $log =0)
     {
         $ch = curl_init();
         if ( is_array ( $param )) {
             $urlparam = http_build_query( $param );
         } else if ( is_string ( $param )) { //json字符串
             $urlparam = $param ;
         }
         curl_setopt( $ch , CURLOPT_URL, $url );
         curl_setopt( $ch , CURLOPT_TIMEOUT, 120); //设置超时时间
         curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //返回原生的(Raw)输出
         curl_setopt( $ch , CURLOPT_POST, 1); //POST
         curl_setopt( $ch , CURLOPT_POSTFIELDS, $urlparam ); //post数据
         if ( $header ) {
             curl_setopt( $ch , CURLOPT_HTTPHEADER, $header );
         }
         if ( $ssl ) {
             curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
             curl_setopt( $ch , CURLOPT_BINARYTRANSFER, true); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
         }
 
         $data = curl_exec( $ch );
         if ( $format == 'json' ) {
             $data = json_decode( $data , true);
         }
 
         if ( $log ){
             if ( $format == 'html' ){
                 self::_logCurlInfo( $ch , $param , '' );
             } else {
                 self::_logCurlInfo( $ch , $param , $data );
             }
         }
         curl_close( $ch );
         return $data ;
     }
 
 
     /**
      * 请求信息记录日志
      * @param $ch       curl句柄
      * @param $request  请求参数
      * @param $response 响应结果
      */
     private static function _logCurlInfo( $ch , $request , $response )
     {
         $info = curl_getinfo( $ch );
         $resultFormat "耗时:[%s] 返回状态:[%s] 请求的url[%s] 请求参数:[%s] 响应结果:[%s] 大小:[%s]kb 速度:[%s]kb/s" ;
         $resultLogMsg =  sprintf( $resultFormat , $info [ 'total_time' ], $info [ 'http_code' ], $info [ 'url' ],var_export( $request ,true),var_export( $response ,true), $info [ 'size_download' ]/1024, $info [ 'speed_download' ]/1024);
         error_log ( $resultLogMsg .PHP_EOL,3,self::CURL_LOG_PATH);
     }
 
}
 
/* example:
     echo Curl::get('http://www.baidu.com');
     $arr = Curl::post('127.0.0.1/test/test.php',['a'=>1,'b'=>2],'',0);
     var_dump($arr);
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值