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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP验证邮箱地址代码

    PHP验证邮箱代码:functionisEmail($email){returnstrlen($email)>6&&preg_match("/^[\w\

    2021年12月20日
    65
  • pytest重试_qq插件加载失败如何处理

    pytest重试_qq插件加载失败如何处理安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月30日
    5
  • 如何关闭vscode git工具[通俗易懂]

    如何关闭VScode工具的git提示只需要关闭用户设置里的Git:Enabled即可;第一步,我们只需要打开”文件->首选项->设置”第二步,在搜索栏中搜索git:Enabled,关闭即可;…

    2022年4月10日
    1.4K
  • springboot到底是什么_Springboot启动流程

    springboot到底是什么_Springboot启动流程SpringBoot是干哈的介绍:springboot是由Pivotal团队提供的全新框架。spring的出现是为了解决企业级开发应用的复杂性,spring的通过注册bean的方式来管理类,但是随着业务的增加,使用xml配置bean的方式也显得相当繁琐,所以springboot就是为了解决spring配置繁琐的问题而诞生的,并且近几年来非常流行开启我的第一个HelloSpringBoot!开启方式根据https://start.spring.io网址创建一个springboot项目

    2022年8月21日
    5
  • 怎么新建pytest的ini文件_bikini

    怎么新建pytest的ini文件_bikini前言pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行查看pytest.ini的配置选项pytest-h找到以下

    2022年7月31日
    6
  • 项目开发中编写的文档

    软件开发中文档的编写是一个不可缺少的环节,常见的如《需求分析》、《概要分析》、《数据库设计》等。在“软件人”的阵营里向来存在两种观点,注重文档还是关心代码。一直争论多少年了,好像都没有一个真正的定乱。

    2021年12月21日
    38

发表回复

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

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