当我在任何浏览器中打开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
无济于事。
标题请求“正常”内容
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
请求“修改”内容的标题
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
答案 0 :(得分:2)
是的,它看起来像维基百科的前端缓存的临时问题。具体来说,当我从浏览器(发送请求标头Accept-Encoding: gzip, deflate
)请求the page in question时,我看到的响应包含标题:
Last-Modified: Thu, 13 Sep 2012 16:46:55 GMT
如果我从命令行使用LWP请求同一页面(不发送Accept-Encoding
标题),则标题看起来非常不同:
Last-Modified: Sat, 25 Aug 2012 12:52:42 GMT
事实上,后一个响应包含您报告使用Java客户端接收的相同过时内容。
我怀疑发生的事情是,在过去的某个时刻,服务器故障导致过时的副本在页面更改时不会从缓存中清除。在此特定实例中,您可以通过purging the page修复它。更一般地说,如果您将来看到这些陈旧的缓存页面出现,您可能希望将问题报告给Wikipedia server admins,以防需要修复的缓存出现问题。
聚苯乙烯。为什么要用Java获取Wikipedia前端HTML页面呢?通常,您应该使用MediaWiki API代替。