1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | <?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); */ |