给出2个网址,如何判断他们实际上指的是同一个网站或网页?

时间:2009-08-17 03:33:35

标签: php regex url

我正在使用Php。

给出2个这样的网址,http://soccernet.comhttp://soccernet.espn.go.com/index?cc=4716

如何判断它们实际上是一样的?

还要考虑差异为httpS的情况,例如https://gmail.comhttp://gmail.com

请指教。我发现使用正则表达式很困难,因为有时它对于区分例如足球网的例子并不是很好。

我愿意接受各种可能的好主意,而不仅仅局限于正则表达式。

编辑:感谢下面的所有评论和答案。如何获得一定程度的确定性?我应该寻找什么因素?我该如何以最有效的方式解决这个问题?

7 个答案:

答案 0 :(得分:4)

考虑到你的足球网络示例,我真的不认为这是可能的,而不是实际比较每页的输出。

答案 1 :(得分:1)

唯一的方法是下载每个页面并进行比较。

真的,这不应该太麻烦,因为你的普通HTML文件相当小(通常最好不到100KB)。您无需下载所有引用的文件。

答案 2 :(得分:0)

在一般情况下,您无法确定这一点。如果server1和server2都映射到相同的IP地址,则http://server1/page.aspxhttp://server2/page.aspx可以是同一页面;实际上,如果它们都映射到同一服务器场。

事实上,即使它们是同一页面,如果页面根据用于请求它的URL呈现不同,它们也可能具有完全不同的内容。

答案 3 :(得分:0)

可能你可以确定它们是相同的,你可以在发出HEAD请求后比较filesize,虽然这并不能完全满足你想要的。

在执行HEAD请求后,如果文件大小相同,您可以获取要比较的内容。

以下是关于执行HEAD请求的一些信息:

http://www.eggheadcafe.com/tutorials/aspnet/2c13cafc-be1c-4dd8-9129-f82f59991517/the-lowly-http-head-reque.aspx

答案 4 :(得分:0)

soccernet.com和soccernet.espn.go.com是完全不同的网址。这是一个非常具体的案例,当程序需要HTTP访问soccernet.com注意它重定向到soccernet.espn.go.com。你的案子是否可行?

答案 5 :(得分:0)

您可以执行HTTP HEAD请求以确定是否将页面重定向到其他位置。你可以比较实际的响应文件,但是对于像ESPN这样的网站,由于跟踪javascript和广告,即使相同的网址很少会回复相同的内容。

使用get_headers()函数并递归地跟随“Location”键。因此'soccernet.com'重定向到“http://soccernet.espn.go.com/archive/”,重定向到“http://soccernet.espn.go.com/index”。忽略查询字符串,此网址和您拥有的其他网址是等效的。

print_r(get_headers('http://soccernet.espn.go.com/archive/'),1)

答案 6 :(得分:0)

也许cURL是你的朋友。它可以遵循重定向like this