当我打开 http://en.wikipedia.org/wiki/Category:Births_by_year在任何浏览器中,我都会看到包含许多子类别和一个子页面的类别页面 http://en.wikipedia.org/wiki/Park_Sung-Baek
但是当我用 Java 读取同一个页面时,我得到的类别页面具有不同的内容。而不是上面提到的子页面,它包含 http://en.wikipedia.org/wiki/User:Mijotoba/Ruth_Stella_Correa_Palacio
怎么可能?为什么维基百科呈现不同的页面?
设置 User-Agent
没有帮助。
请求“正常”内容的 header
GET http://en.wikipedia.org/wiki/Category:Births_by_year HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ru-RU,zh-CN;q=0.5
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: en.wikipedia.org
请求“修改”内容的 header
GET http://en.wikipedia.org/wiki/Category:Births_by_year HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: en.wikipedia.org
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
最佳答案
是的,这看起来像是维基百科前端缓存的暂时性问题。具体来说,当我请求 the page in question从我的浏览器(发送请求 header Accept-Encoding: gzip, deflate
),我看到的响应包含 header :
Last-Modified: Thu, 13 Sep 2012 16:46:55 GMT
如果我使用 LWP 请求相同的页面从命令行(不发送 Accept-Encoding
header )来看, header 看起来非常不同:
Last-Modified: Sat, 25 Aug 2012 12:52:42 GMT
而且,实际上,后一个响应包含您报告的通过 Java 客户端收到的相同过时内容。
我怀疑发生的事情是,在过去的某个时候,服务器故障导致页面更改时未从缓存中清除过时的副本。在这种特殊情况下,您可能可以通过 purging the page 修复它.更一般地说,如果您以后继续看到此类陈旧的缓存页面,您可能需要将此问题报告给 Wikipedia server admins ,以防缓存出现问题需要修复。
附言。你为什么要用 Java 获取维基百科前端 HTML 页面?通常,您应该使用 MediaWiki API相反。
关于java - 为什么我看到的页面与维基百科不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466351/