curl抓取页面时遇到重定向的解决方法
2016-03-15 15:17
169 查看
http://blog.csdn.net/syhd142/article/details/8525603
用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下:
[php] view
plain copy
<?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
执行上述代码,得到的结果:
[plain] view
plain copy
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] view
plain copy
<?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时,递归将终止。
在抓取中任何跳转带来的问题,都可通过设置此参数解决。
用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下:
[php] view
plain copy
<?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
执行上述代码,得到的结果:
[plain] view
plain copy
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] view
plain copy
<?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时,递归将终止。
在抓取中任何跳转带来的问题,都可通过设置此参数解决。
相关文章推荐
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
- sqrt函数的实现
- 17
- 从零开始学Linux[三]:VIM常用编辑指令
- jaxb2-maven-plugin使用说明
- Android 自定义View (二) 进阶
- iOS 监测用户将屏幕朝下翻转
- 查询SQL Server 数据库连接的方法
- (4.5.2.7)Android Studio如何设置代码自动提示
- 绑定和非绑定方法
- CSS样式--居中设置
- 配置Git的user name和email
- jQuery 效果 - animate() 方法
- iOS:学习runtime的理解和心得
- 二周#学习进度总结
- 常用排序算法的C语言版实现示例整理
- [译]Kinect for Windows SDK开发入门(十五):进阶指引 下
- servlet向jsp发送的数据出现乱码的解决方法
- Android5.0特性3--水波纹
- TBC历史版本