用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下:

[php] view plaincopy
  1. <?php
  2. function curlGet($url) {
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, $url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_HEADER, true);
  7. return curl_exec($ch);
  8. }
  9. $url = 'http://144go.com';
  10. echo curlGet($url), "\n";

代码的目的很简单,抓取页面:http://www.144go.com
执行上述代码,得到的结果:

[plain] view plaincopy
  1. HTTP/1.1 301 Moved Permanently
  2. Content-Length: 144
  3. Content-Type: text/html
  4. Location: http://www.144go.com/
  5. Server: Microsoft-IIS/6.0
  6. X-Powered-By: ASP.NET
  7. Date: Mon, 03 Sep 2012 04:25:22 GMT
  8. <head><title>Document Moved</title></head>
  9. <body><h1>Object Moved</h1>This document may be found <a HREF="http://www.144go.com/">here</a></body>

由结果中的
Location: http://www.144go.com/
可知http://144go.com被重定向到了http://www.144go.com/

怎么办呢,要用正则分析出Location部分的链接,重复执行执行curlGet吗?行到是行,就是有点麻烦。

其实只要加一条语就可以了:

[php] view plaincopy
  1. <?php
  2. function curlGet($url) {
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, $url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_HEADER, true);
  7. //函数中加入下面这条语句
  8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  9. return curl_exec($ch);
  10. }

再次执行代码,可以抓取到想要的页面。
CURLOPT_FOLLOWLOCATION指明:
让curl递归的抓取http头中Location中指明的url。
当抓取次数超过CURLOPT_MAXREDIRS时,递归将终止。
在抓取中任何跳转带来的问题,都可通过设置此参数解决。

转载于:https://www.cnblogs.com/huojing/articles/5725917.html

curl抓取页面时遇到重定向的解决方法(转)相关推荐

  1. PHP使用CURL抓取页面

    cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php//1.初始化,创建 ...

  2. curl抓取页面是乱码 php_php解决curl编码问题-curl乱码-curl在post表单时乱码

    目前经常使用的编码为UTF-8当然还有GB2312,GBK等编码,在进行网页的抓取分析的时候总会遇到乱码的问题,当网页编码为GB2312数据库编码为UTF-8时也会遇到这个问题. php的mb_con ...

  3. php 让百度蜘蛛抓取403,百度蜘蛛抓取不存在目录 对应的解决方法

    相信大家在分析百度蜘蛛日志的时候经常会发现一个问题,就是百度蜘蛛经常会抓取一些不存在的目录,比如:我网站没有这些目录,但是百度蜘蛛一直在抓取,或者你会发现百度蜘蛛在抓取自己的隐私目录,或者说php文件 ...

  4. opencv VideoCapture抓取RTSP高延迟,崩溃解决方法

    目前项目需要对网络摄像头进行实时视觉算法检测. 遇到问题: 在使用抓取VideoCaptureRTSP流的过程中,若需要对图像进行处理,则最后的显示结果画面就会表现出高延迟,然后卡住,很快崩溃: 直观 ...

  5. curl抓取页面是乱码 php_php curl 获取网页内容 中文乱码

    获取是没问题..但是似乎字符编码上有些问题, //header( "Content-type:text/html;Charset=utf-8" ); $urls = [ 'http ...

  6. curl抓取页面每次生成新的session问题

    2019独角兽企业重金招聘Python工程师标准>>> curl_setopt($ch , CURLOPT_COOKIEJAR , COOKIE_FILE_PATH); curl_s ...

  7. Filter进行登录验证时循环重定向的解决方法

    Filter也称之为过滤器,它是Servlet2.3以上新增加的一个功能,其技术是非常强大的.通过Filter技术可以对WEB服务器的文件进行拦截过滤,从而实现一些特殊的功能.在JSP开发应用中也是必 ...

  8. springboot从控制器请求至页面时js失效的解决方法

    大家好,我是雄雄,欢迎关注公众号[雄雄的小课堂]. 昨天遇到了个很棘手的问题,其实也怪自己大意了,然后翻来覆去一个类一个类的去看,看完之后挨个技术点怀疑,然后分别从各个技术点入手解决,但都无功而返! ...

  9. springboot+layui从控制器请求至页面时js失效的解决方法

    大家好,我是雄雄,欢迎关注公众号[雄雄的小课堂]. 昨天遇到了个很棘手的问题,其实也怪自己大意了,然后翻来覆去一个类一个类的去看,看完之后挨个技术点怀疑,然后分别从各个技术点入手解决,但都无功而返! ...

最新文章

  1. Scrum敏捷开发看板工具分享
  2. Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
  3. docker 主机ip_docker容器指定ip
  4. php mysql找不到文件,php – 在MySQL中找不到outfile创建的文件
  5. 对分贝(dB)概念的理解
  6. 追寻终极数据库 - 事务/分析混合处理系统的交付挑战 (1)
  7. Spring+Mybatis 多数据源配置
  8. 手把手教你查看android系统源码
  9. 300plc与组态王mpi通讯_S7-300与S7-200之间的MPI通信
  10. 用O(1)的时间复杂度删除单链表中的某个节点
  11. java redis 面试题_Java开发人员怎么面试 常见Redis面试题有哪些
  12. 安装Nginx到linux服务器(Ubuntu)详解
  13. python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
  14. solr是c语言开发的吗,开发人员如何快速定制化实现一个基于Solr的搜索引擎
  15. 中国移动实习计算机技术岗,暑期实习生去中国移动面试经历
  16. 南开100题C语言(021-030)
  17. 同学聚会,进行点菜,点了大盘鸡 水煮鱼 大虾 以及4个凉菜 1箱啤酒 分别录入各个单价,并计算总价,录入总学生数,计算人均多少钱。
  18. sco unix和linux区别,SCOUNIX到Linux操作系统的程序移植问题有哪些呢?
  19. 百度apollo planning代码学习-Apollo\modules\planning\math\piecewise_jerk\PiecewiseJerkPathProblem类代码详解
  20. SpeechRecognition离线语音识别

热门文章

  1. 关于操作日志表的设计问题
  2. [导入]3.5 [ Enterprise Library ]注入模型设计
  3. oracle安装清单过不去,oracle 11g(二)安装过程
  4. mycat和MySQL版本兼容_mycat下mysql jdbc connector使用高版本报PacketTooBigException异常
  5. flutter图片识别_Flutter 资源和图片
  6. url 参数 后台 加密_一套拿来即用的后台管理系统,非常方便(附项目地址)
  7. mysql索引查询 with_mysql的select语句总结与索引使用
  8. 家用电器用户行为分析与事件识别_用户行为分析埋点实时数仓实践
  9. 网络端口的分类和作用
  10. sublime text3 怎么配置、运行python_怎么用sublime text 3搭建python 的ide?