小麦子 发表于 2024-10-21 12:06:04

跟踪301重定向获取落地页域名的php代码

很多网站设置了301重定向,禁止游客访问,只允许百度ua真实跳转。下面的php可以实现规则适配,批量抓取,并保存真实的落地页。首先我们新建一个url.txt,里面放上域名及规则,一行一个,比如:https://www.niuniubbs.com/{数字5}.html

以上只是部份演示图片,详细可以付费购买。
然后我们新建一个php,代码如下: <?php
// 读取url.txt文件中的域名列表
$urls = file('url.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// 支持的标签
$tags = [
    '{年}' => date('Y'),
    '{月}' => date('m'),
    '{日}' => date('d'),
    '{时}' => date('H'),
    '{分}' => date('i'),
    '{秒}' => date('s')
];

// 创建一个用于保存301重定向后页面的数组
$redirects = [];

// 遍历域名列表
foreach ($urls as $url) {
    // 替换URL中的标签
    foreach ($tags as $tag => $value) {
      $url = str_replace($tag, $value, $url);
    }
   
    // 匹配并替换{n}为随机数
    preg_match_all('/{数字(\d+)}/', $url, $matches);
    foreach ($matches as $match) {
      $replace = '';
      for ($i = 0; $i < $match; $i++) {
            $replace .= mt_rand(0, 9);
      }
      $url = str_replace('{数字'.$match.'}', $replace, $url);
    }
   
    // 模拟百度蜘蛛访问
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
   
    // 添加等待时间(单位:秒)
    $waitTime = 3;
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $waitTime); // 连接超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, $waitTime); // 总超时时间
   
    curl_exec($ch);
   
    // 获取重定向后的地址
    $redirectUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
   
    // 提取根域名
    $parsedUrl = parse_url($redirectUrl);
    $rootDomain = getRootDomain($parsedUrl['host']);
   
    // 关闭curl请求
    curl_close($ch);
   
    // 判断是否已经存在相同的根域名,如果不存在则添加到数组中
    if (!in_array($rootDomain, $redirects)) {
      $redirects[] = $rootDomain;
    }
}

// 将重定向地址写入301.txt文件
file_put_contents('301.txt', implode(PHP_EOL, $redirects));

echo '完成!';

/**
* 取得根域名
* @param string $domain 域名
* @return string 返回根域名
*/
function getRootDomain($domain) {
    $re_domain = "";
    $domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "icu","top","com.cn", "cn");
    $array_domain = explode(".", $domain);
    $array_num = count($array_domain) - 1;
   
    if ($array_domain[$array_num] == 'cn') {
      if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
            $re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
      } else {
            $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
      }
    } else {
      $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
    }
   
    return $re_domain;
}
?>

页: [1]
查看完整版本: 跟踪301重定向获取落地页域名的php代码