• 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

  • 相关阅读:
    在Windows .NET平台下使用Memcached
    Windows下配置使用MemCached
    B/S 网站技术选型
    HttpHandler与HttpModule的用处与区别
    TCP长连接与短连接的区别
    页和区 sql server
    聚集索引和非聚集索引的区别
    MicrosoftSQLServer中的锁模式
    我是如何在SQLServer中处理每天四亿三千万记录的
    datetime模块处理时间
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453168.html
Copyright © 2020-2023  润新知