用php怎么批量获取302跳转后的真实地址

@Ta 2017-11-03 4047点击
这么写的,效率太低了,有几千可能上万个地址要转换怎么办?
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// 不需要页面内容
curl_setopt($ch, CURLOPT_NOBODY, 1);
// 不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 返回最后的Location
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
$info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
curl_close($ch);
?>
回复列表(8|隐藏机器人聊天)
  • @Ta / 2017-11-03 / /
    被禁言
    用户被禁言,发言自动屏蔽。
  • @Ta / 2017-11-04 / /
    get_headers
  • @Ta / 2017-11-04 / /
    @,循环50次就没响应了,转换1万个地址。。。
  • @Ta / 2017-11-04 / /
    @hostei,分批处理,或者多线程,php你本来就设置了运行时间是30秒,别给他一个小时的任务
  • @Ta / 2017-11-04 / /
    @,说了半天又回到原点了
  • @Ta / 2017-11-04 / /
    @hostei,别想了,不可能有现成的函数可以做到的,因为每一次的线程都是有时间限制的,执行的超出了,超出部分就不会执行的了
  • @Ta / 2017-11-05 / /

    @hostei,如果跳转后的地址是没有规律的,那你就无法避免发几万个请求给服务器,然后问题就变成怎么实现效率比较高了。

    如果只会302一次,用get_headers()可以减少一次请求。(设置curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1)时,curl会请求跳转后的页面,虽然你并不需要那个页面,你从前一个页面就已经能得到跳转后的地址了。)

    $h = get_headers('https://hu60.net/', 1);
    echo $h['Location']; //可能是相对路径,可能没有域名,自己简单的补全一下就好
    
  • @Ta / 2017-11-05 / /
    @老虎会游泳,只有一次跳转,看网上说get_headers效率不高才用的curl,看来还是用get_headers慢慢循环吧。我是采集一个网站java游戏,现在java游戏的资源越来越少了,那个网站也转安卓了,关闭了java游戏的搜索,不一定哪天java游戏的下载也关闭了
添加新回复
回复需要登录