【问题标题】:PHP Curl connect to page an wait for redirectPHP Curl 连接到页面等待重定向
【发布时间】:2016-05-23 20:44:38
【问题描述】:

我正在尝试从页面中抓取数据并尝试在 PHP 中使用 CURL。

问题是该站点有时负载很重,并给我一个消息“请稍等...正在处理您的请求...”并且每 5 秒刷新一次元数据,直到服务器可用。这可能是多次刷新。

我已经尝试添加

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

这无济于事,因为它会刷新多次。

有没有办法让它等到没有更多刷新或确认它已以某种方式到达下一页?

curently 脚本

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $data = curl_exec($ch);
    curl_close($ch);

感谢任何帮助。 如果这不能用 curl 完成,你会建议另一种方法吗?

【问题讨论】:

  • 请发布元刷新。
  • 这只能通过重复请求来完成。确保您连接的服务同意您的重复请求。毕竟,您正在为繁重的负担做出贡献
  • 是的,它们允许抓取。

标签: php curl


【解决方案1】:

你可以试试这样的:

<?php
    $data= "" ;
    $retries = 0;
    while( preg_match('/<meta http-equiv="refresh"/im', $data) or  $retries < 5){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $data = curl_exec($ch);
        curl_close($ch);
        if(!preg_match('/<meta http-equiv="refresh"/im', $data))
        {
            break;
        }
        $retries++;
        sleep(2);
    }
?>

上面将尝试解析html 5 次并在重试之间等待2 秒,因为html 不包含&lt;meta http-equiv="refresh

【讨论】:

  • 这只是重新提交请求。增加服务器负载。我希望它保持在单一连接上。
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2012-08-01
  • 2017-11-18
  • 2012-09-23
相关资源
最近更新 更多