我正在使用Php。
给出2个这样的网址,http://soccernet.com和http://soccernet.espn.go.com/index?cc=4716
如何判断它们实际上是一样的?
还要考虑差异为httpS的情况,例如https://gmail.com和http://gmail.com
请指教。我发现使用正则表达式很困难,因为有时它对于区分例如足球网的例子并不是很好。
我愿意接受各种可能的好主意,而不仅仅局限于正则表达式。
编辑:感谢下面的所有评论和答案。如何获得一定程度的确定性?我应该寻找什么因素?我该如何以最有效的方式解决这个问题?
答案 0 :(得分:4)
考虑到你的足球网络示例,我真的不认为这是可能的,而不是实际比较每页的输出。
答案 1 :(得分:1)
唯一的方法是下载每个页面并进行比较。
真的,这不应该太麻烦,因为你的普通HTML文件相当小(通常最好不到100KB)。您无需下载所有引用的文件。
答案 2 :(得分:0)
在一般情况下,您无法确定这一点。如果server1和server2都映射到相同的IP地址,则http://server1/page.aspx和http://server2/page.aspx可以是同一页面;实际上,如果它们都映射到同一服务器场。
事实上,即使它们是同一页面,如果页面根据用于请求它的URL呈现不同,它们也可能具有完全不同的内容。
答案 3 :(得分:0)
可能你可以确定它们是相同的,你可以在发出HEAD请求后比较filesize,虽然这并不能完全满足你想要的。
在执行HEAD请求后,如果文件大小相同,您可以获取要比较的内容。
以下是关于执行HEAD请求的一些信息:
答案 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。