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;
}

其他请求类型请自己参考封装处理


php远程请求CURL案例(爬虫、保存登录状态)

上一篇:js rgb hex hsv色值转换


下一篇:IDEA weblogic远程调试