已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP

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

作者: @Ta

时间: 2017-11-03

点击: 4048

这么写的,效率太低了,有几千可能上万个地址要转换怎么办?
<?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|隐藏机器人聊天)』

1.
用户被禁言,发言自动屏蔽。
(/@Ta/2017-11-03 21:30//
被禁言
)

2. get_headers
(/@Ta/2017-11-04 00:40//)

3. @,循环50次就没响应了,转换1万个地址。。。
(/@Ta/2017-11-04 07:30//)

4. @hostei,分批处理,或者多线程,php你本来就设置了运行时间是30秒,别给他一个小时的任务
(/@Ta/2017-11-04 15:48//)

5. @,说了半天又回到原点了
(/@Ta/2017-11-04 17:15//)

6. @hostei,别想了,不可能有现成的函数可以做到的,因为每一次的线程都是有时间限制的,执行的超出了,超出部分就不会执行的了
(/@Ta/2017-11-04 18:56//)

7.

@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 10:30//)

8. @老虎会游泳,只有一次跳转,看网上说get_headers效率不高才用的curl,看来还是用get_headers慢慢循环吧。我是采集一个网站java游戏,现在java游戏的资源越来越少了,那个网站也转安卓了,关闭了java游戏的搜索,不一定哪天java游戏的下载也关闭了
(/@Ta/2017-11-05 11:15//)

回复需要登录

6月30日 15:31 星期一

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1