/** * curl_get * @param $url * @param null $param * @param null $options * @return array */ function curl_get($url, $param = null, $options = null){ $defaultOptions = array( 'timeout' => 30, // 超时时间(秒) // header(请求头) Array|String 推荐使用数组 // 参数格式1(数组): // array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36') // 参数格式2(字符串): // $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"; 'header' => [], 'get_header' => false, // 是否返回请求头,默认false // 请求头里的cookie(字符串) String 直接复制浏览器请求头里set-cookie即可 'cookie' => '', // cookiePath String cookie文件路径,需要可读写权限 'cookie_file' => '', // 是否启动跟踪,重定向页面是否跟随跳转 'followlocation' => 0, // 禁止服务器端的验证ssl 'ssl' => 0, // 伪装请求来源,绕过防盗 'referer' => null ); // 处理默认值 foreach ($defaultOptions as $key => $item) { if(!isset($options[$key])){ $options[$key] = $item; } } $result = array( 'code' => 0, 'msg' => 'success', 'body' => '' ); if (is_array($param)) { $param = http_build_query($param); } $url = strstr($url,'?')? trim($url,'&').'&'.$param: $url.'?'.$param; $ch = curl_init(); // curl初始化 curl_setopt($ch, CURLOPT_URL, $url); // 设置url // 判断&设置超时 !empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']); // 判断&设置请求头 if (!empty($options['header'])) { if (is_string($options['header'])) { $header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串 $header = explode('__SLONG__', $header); // 通过特定字符串分割成数组 $options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组 } curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); } // cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来 //,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去 //, 并在有新cookie更新时写入到文件里 if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) { // 自动同步更新 curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']); curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']); } elseif (!empty($options['cookie'])) { // 固定cookie curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']); } // 是否跟踪(重定向页面是否继续抓取) !empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options['followlocation']); // 禁止服务器端的验证ssl empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); //伪装请求来源,绕过防盗 !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); //curl解压gzip页面内容 curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面 // 设置预设之外的参数 if (count($options) != count($defaultOptions)) { foreach ($options as $key => $item) { if (!isset($defaultOptions[$key])) { curl_setopt($ch, $key, $item); } } } //执行并获取内容 $output = curl_exec($ch); //对获取到的内容进行操作 if ($output === false) { $result['code'] = 1; // 错误 $result['msg'] = "CURL Error:".curl_error($ch); } else { if ($options['get_header']) { // 获得响应结果里的:头大小 $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); // 根据头大小去获取头信息内容 $result['header'] = substr($output, 0, $headerSize); $result['body'] = substr($output, $headerSize); }else{ $result['body'] = $output; } } //释放curl句柄 curl_close($ch); return $result; }POST案例
/** * curl_post * @param $url 请求地址 * @param null $param get参数 * @param array $options 配置参数 * @return array */ function curl_post($url, $param = null, $options = array()){ $defaultOptions = array( 'timeout' => 30, // 超时时间(秒) // header(请求头) Array|String 推荐使用数组 // 参数格式1(数组): // array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36') // 参数格式2(字符串): // $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"; 'header' => [], 'get_header' => false, // 是否返回请求头,默认false // 请求头里的cookie(字符串) String 直接复制浏览器请求头里set-cookie即可 'cookie' => '', // cookiePath String cookie文件路径,需要可读写权限 'cookie_file' => '', // 是否启动跟踪,重定向页面是否跟随跳转 'followlocation' => 0, // 禁止服务器端的验证ssl 'ssl' => 0, // 伪装请求来源,绕过防盗 'referer' => null ); // 处理默认值 foreach ($defaultOptions as $key => $item) { if (!isset($options[$key])) { $options[$key] = $item; } } $result = array( 'code' => 0, 'msg' => 'success', 'body' => '' ); if (is_array($param)) { $param = http_build_query($param); } $ch = curl_init(); // curl初始化 curl_setopt($ch, CURLOPT_URL, $url); // 设置url curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $param); // 判断&设置超时 !empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']); // 判断&设置请求头 if (!empty($options['header'])) { if (is_string($options['header'])) { $header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串 $header = explode('__SLONG__', $header); // 通过特定字符串分割成数组 $options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组 } curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); } // cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来 //,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去 //, 并在有新cookie更新时写入到文件里 if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) { // 自动同步更新 curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']); curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']); } elseif (!empty($options['cookie'])) { // 固定cookie curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']); } // 是否跟踪(重定向页面是否继续抓取) !empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options['followlocation']); // 禁止服务器端的验证ssl empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); //伪装请求来源,绕过防盗 !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); //curl解压gzip页面内容 curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面 // 设置预设之外的参数 if (count($options) != count($defaultOptions)) { foreach ($options as $key => $item) { if (!isset($defaultOptions[$key])) { curl_setopt($ch, $key, $item); } } } //执行并获取内容 $output = curl_exec($ch); //对获取到的内容进行操作 if ($output === false) { $result['code'] = 1; // 错误 $result['msg'] = "CURL Error:".curl_error($ch); } else { if ($options['get_header']) { // 获得响应结果里的:头大小 $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); // 根据头大小去获取头信息内容 $result['header'] = substr($output, 0, $headerSize); $result['body'] = substr($output, $headerSize); } else { $result['body'] = $output; } } //释放curl句柄 curl_close($ch); return $result; }
其他请求类型请自己参考封装处理