curl抓取页面时遇到重定向的解决方法

curl抓取页面时遇到重定向的解决方法

大家好,又见面了,我是全栈君。

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

<?php
function curlGet($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, true);
return curl_exec($ch);
}

$url = 'http://144go.com';
echo curlGet($url), "\n";

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

HTTP/1.1 301 Moved Permanently
Content-Length: 144
Content-Type: text/html
Location: http://www.144go.com/
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Mon, 03 Sep 2012 04:25:22 GMT
 
<head><title>Document Moved</title></head>
<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
function curlGet($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, true);
  //函数中加入下面这条语句
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
return curl_exec($ch);
}

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

有关重定向的问题,可参考HTTP返回码中301与302的区别
———————

原文链接:https://blog.csdn.net/qmhball/article/details/7937534

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112126.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3W原则[通俗易懂]

    3W原则[通俗易懂]目的:为了减少走线之间的电磁串扰。两个走线中心间距至少得大于3倍的线宽。用规则进行约束,但是规则用的两线之间的距离是边缘距离。因此规则设置的值应为10.8。(即线宽的两倍10.8=5.4X2)…

    2022年6月17日
    28
  • 微软OOXML正式成为国际标准 更名为OXML

    微软OOXML正式成为国际标准 更名为OXML  近日,ISO组织宣布,由于赢得了足够的支持,微软的OOXML文档格式已被批准为全球行业标准,并将其命名更改为“OpenXML”。  为了使OOXML文档格式成为国际标准,微软一直在努力寻求各界支持,包括积极争取各国政府合同,吸引开发界开发新的应用程序软件等。去年9月,ISO在首轮投票中拒绝了OOXML成为国际标准的请求,在104个成员国中,只有53%投了赞成票,未达到成为国际标准所需的2/

    2022年7月16日
    28
  • python要不要装pycharm-Python和pyCharm安装「建议收藏」

    python要不要装pycharm-Python和pyCharm安装「建议收藏」Python是一种解释型脚本语言,可以应用于以下领域:Web和Internet开发科学计算和统计人工智能教育桌面界面开发软件开发后端开发Python在数据分析、后端开发、人工智能、运维、全栈开发等多方面都具有得天独厚的优势。与其他语言相比,Python无论是在就业薪水方面,还是在市场岗位需求方面,都是当之无愧的黑马。1.Python下载不要点击灰色按钮,这个是Python的最新版本,但不是稳…

    2022年8月27日
    3
  • Java设计模式(五)之创建型模式:原型模式

    Java设计模式(五)之创建型模式:原型模式

    2021年4月8日
    125
  • SplitContainer的使用

    SplitContainer的使用作用:(Splitter的简化)使用 SplitContainer 控件可分隔容器(如 Form)的显示区域,并使用户可以调整已添加到 SplitContainer 面板中的控件的大小。当用户将鼠标指针移到拆分器上时,光标将发生变化,以指示可以调整 SplitContainer 控件内部的控件的大小。SplitContainer 也使设计时的控件放置更容易。例如,若要创建一个与Win

    2022年7月18日
    25
  • 将JS嵌入C++ ————Spidermonkey引擎的使用「建议收藏」

    将JS嵌入C++ ————Spidermonkey引擎的使用「建议收藏」Spidermonkey是火狐的js引擎。我曾经仔细比较过C++嵌入Spidermonkey和v8,最终因为对多线程并行比较执着,于是最终选择了Spidermonkey。网上流传的关于Spidermonkey引擎的用法大多还停留在1.8.5版本。随着更新迭代,高版本的js引擎更快更符合js标准也更好用,但相关资料比较少,官网文档更是惨不忍睹几乎和没有文档一样。最近我接触到了…

    2022年10月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号