php远程请求CURL案例(爬虫、保存登录状态)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php远程请求CURL案例(爬虫、保存登录状态),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8685字,纯文字阅读大概需要13分钟。
内容图文
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; }
其他请求类型请自己参考封装处理
原文:https://blog.51cto.com/u_15115111/2801268
内容总结
以上是互联网集市为您收集整理的php远程请求CURL案例(爬虫、保存登录状态)全部内容,希望文章能够帮你解决php远程请求CURL案例(爬虫、保存登录状态)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。