标签:ch setopt 爬虫 options header cookie CURL php curl
GET案例/** * 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; }
其他请求类型请自己参考封装处理
标签:ch,setopt,爬虫,options,header,cookie,CURL,php,curl 来源: https://blog.51cto.com/u_15115111/2801268
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。