【问题标题】:How to know if two URLS lead to the same page如何知道两个 URL 是否指向同一个页面
【发布时间】:2010-02-08 04:28:07
【问题描述】:

我想写一个小脚本来判断两个 URL 是否指向同一个页面。例如:http://google.comhttp://google.com/# 将指向相同的 URL。有时http://URL1.comhttp://URL2.com 也会指向同一个页面,尽管它们不是同一个 URL。

有没有简单的方法可以做到这一点?

如果您需要更多信息,请告诉我,我会编辑帖子

注意:这不是家庭作业问题,因此请尽可能提供帮助。

谢谢大家!

【问题讨论】:

  • Ummm .. 告诉我们这不是一个家庭作业问题让我相信它...整个“无故防御”东西...
  • 如果您查看我所有的帖子,您就会明白我将作业问题标记为作业问题,而当它们不是作业问题时,我会这么说:) 所以,不,这不是作业问题,谢谢您无论如何评论!

标签: php


【解决方案1】:

这是一种非常肮脏的方式,但我想这就是你想要的:

if(file_get_contents('http://URL1.com') === file_get_contents('http://URL2.com')) {
    // Leading to the same page!
}

请注意,如果页面有微小的更改,例如时间(即,请求恰好在 13:45:59 和 13:46:00 之间发出)、cookie 或任何动态的,它将不起作用。

【讨论】:

  • 我是否应该费心列举所有可能失败的方式?
  • LiraNuna,我知道这不会一直有效,但非常感谢您尝试回答这个问题。 Chacha102,LiraNuna 试图提供答案,我非常感谢。我问这个问题是因为我觉得这是一个难题,所以我想我会在 stackoverflow 上看看人们的一些想法,无论如何感谢您对这个问题的贡献。 :)
  • @user 我什至不是在批评 Lira ...我是在告诉 Ignacio,他不应该真正列举这可能会失败的方式。
【解决方案2】:

所以...

这可能非常棘手,因为没有“真正”的方法来检测它。您可以检测 Location 标头以查看是否存在重定向,但这并非万无一失,因为有些人会进行内部重定向。 (意思是,stackoverflow.com 看起来与 stackoverflow2.com 相同。)

我能想到的唯一真正的方法是检查页面的内容:

又名

$c = curl_init();
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_URL, 'http://localhost/admin/' );
$content1 = curl_exec( $c );
curl_close($c);

$c = curl_init();
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_URL, 'http://localhost/admin/' );
$content2 = curl_exec( $c );
curl_close($c);

if($content1 == $content2)
{
    // same content
}

如果您愿意,您可以将其缩短为仅检查 Content-Length 或其他内容,但您无法仅从标题中分辨出来。

【讨论】:

    【解决方案3】:

    您可以使用parse_url() 处理琐碎的情况。为了检测重定向,您必须使用HTTP facilities 的一部分来获取标头并检测Location 标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2018-12-15
      • 1970-01-01
      相关资源
      最近更新 更多