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


相关推荐

  • 使用sqlldr 导入BLOB 数据

    使用sqlldr 导入BLOB 数据

    2021年5月10日
    124
  • virsh命令详解_1个无法解析的外部命令

    virsh命令详解_1个无法解析的外部命令virsh的详细命令解析virsh有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式virshlist 列出所有的虚拟机,虚拟机的状态有(8)种 runing是运行状态 idel是空闲状态 pause暂停状态 shutdown关闭状态 crash虚拟机崩坏状态 daying垂死状态 shutoff不运行完全关闭 pmsuspe…

    2022年8月12日
    7
  • 如何传输大文件(GB级别)

    如何传输大文件(GB级别)一、拆分:压缩工具,压缩并拆分为多个小文件。二、QQ离线传输QQ离线文件有限制条件:1.离线传送的文件,为用户保存7天,逾期接收方不接收文件,系统将自动删除该文件;2.离线传送的文件,单个文

    2022年7月4日
    21
  • 数据分析之数据预处理、分析建模、可视化[通俗易懂]

    概述:简介、思路、发展历程、应用领域、开发流程;数据类型:结构化与非结构化、定性与定量、截面数据与时间序列数据;数据来源:外部来源、内部来源;数据预处理:数据清洗、数据集成、数据规约、数据变换;数据分析模型:对比分析、漏斗分析、留存分析、A/B测试、用户行为路径分析、用户分群、用户画像分析等;数据分析方法:描述统计、假设检验、信度分析、相关分析、方差分析、回归分析、聚类分析、判别分析、主成分分析、因子分析、时间序列分析等;数据可视化:Excel、PowerBI、Tableau、Python;

    2022年4月17日
    48
  • FileStream Close「建议收藏」

    FileStream Close「建议收藏」           FileStreamf=newFileStream(“hou.txt”,FileMode.Create,FileAccess.ReadWrite);           StreamWriterwf=newStreamWriter(f);           wf.Write(“Helloworld!”);           wf.Close();

    2022年7月21日
    9
  • 将Excel转换为word_excel如何将横排变成竖排

    将Excel转换为word_excel如何将横排变成竖排本次转换用到了NPOI里面的方法,会经过封装成为dll,在.net平台和unity都测试通过。下面主要讲一下思路:1.将表格读取为DataTable类型2.z

    2022年8月22日
    4

发表回复

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

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