为什么我的Java应用程序只提取旧版本的在线文件?

时间:2013-11-26 01:49:58

标签: java caching webserver

我有a file online with information about some Minecraft blocks。当我第一次制作这个测试文件时,我给了它三行,下一个星期日的标题到期日期(无论何时可能)。我的Java应用程序取得了这个没问题!

但是,现在我已经在这个小型数据库中插入了三行,并将截止日期更改为上周,但是我的Java应用程序仍显示原始的3 !当我在浏览器中访问该页面时,它为我提供了完整的当前表格。 为什么Java应用程序仍然只提取旧版本?

关键代码:

InputStream in;
URLConnection urlc = url.openConnection(); // url is a valid java.net.URL object
urlc.setAllowUserInteraction(false);
urlc.setDoInput(true);
urlc.setDoOutput(false);
urlc.setRequestProperty("User-Agent", "BHMI/3.0.0 (+http://prog.BHStudios.org/BHMI) Java/" + System.getProperty("java.version") + "(" + System.getProperty("java.vm.name") + ")"); // GoDaddy blocks Java clients, so we must have a custom user agent string
urlc.setDefaultUseCaches(false);
urlc.setUseCaches(false);
urlc.connect();
System.out.println("Connection successful! Database expires " + new Date(urlc.getExpiration()));
in = urlc.getInputStream();
int data;
StringBuilder sb = new StringBuilder();
while ((data = in.read()) != -1)
    sb.append((char) data);
System.out.println("RAW DATA:\r\n"+sb);

示例输出:

Connection successful! Database expires Tue Nov 26 00:09:05 EST 2013
RAW DATA:
minecraft:air,Air,0,0,,
minecraft:stone,Stone,1,0,2,
minecraft:grass,Grass,2,0,,

通过Windows控制面板清除了Java网络缓存 以及使用CCleaner在我的本地计算机上的所有缓存和临时文件,但这仍然会发生。哎呀,它发生在机器上,所以不可能。 我已经清除了服务器上的所有边缘缓存,所以它也不可能。 我告诉我的浏览器使用我的Java应用程序的用户代理字符串后,我甚至尝试下载该文件,并且它获取了所有5行。

请求标头

来自我的Java应用程序:

GET /http/bhstudios/v2/prog/bhmi/database/get HTTP/1.1
User-Agent: BHMI/3.0.0 (+http://prog.BHStudios.org/BHMI) Java/1.7.0_45(Java HotSpot(TM) 64-Bit Server VM)
Cache-Control: no-cache, must-revalidate, max-age=0, no-store
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Connection: close
Host: BHStudios.org
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

从Chrome中欺骗相同的用户代理字符串:

GET /prog/bhmi/database/get/ HTTP/1.1
Host: prog.bhstudios.org
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: BHMI/3.0.0 (+http://prog.BHStudios.org/BHMI) Java/1.7.0_45(Java HotSpot(TM) 64-Bit Server VM)
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: __cfduid=dc9d0394ed55ebb1214fcbb5fc825626b1385426208553; visitorId=5293ed2b758cb1b5620000b0

响应标头

来自我的Java应用程序:

HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Tue, 26 Nov 2013 02:17:39 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d4432e3d81cf9e5b9393f2cca483e4b2d1385432256651; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.bhstudios.org; HttpOnly
X-Powered-By: ASP.NET
X-UA-Compatible: chrome=IE8
CF-RAY: d33155416660862

请注意可疑Cookie过期expires=Mon, 23-Dec-2019 23:50:00 GMT。这可能是原因吗?

我还注意到,从Chrome获取并使用与我的应用相同的用户代理字符串时,标题为:

HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Wed, 27 Nov 2013 17:30:01 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache, must-revalidate, max-age=0, no-store
Pragma: no-cache
Expires: Mon, 18 Nov 2013 10:30:01 America/Phoenix
Content-Description: File Transfer
Content-Disposition: attachment; filename=BHMI_Items_Vanilla_172.csv
Content-Transfer-Encoding: base64
X-Powered-By: ASP.NET
X-UA-Compatible: chrome=IE8
CF-RAY: d408b3c56320098
Content-Encoding: gzip

这是预期的标题,截止日期为上周。

2 个答案:

答案 0 :(得分:2)

您必须在请求标头信息中输入您正在查找未缓存的数据:

  urlc.setRequestProperty("Cache-Control","no-cache, must-revalidate"); //HTTP 1.1
  urlc.setRequestProperty("Pragma","no-cache"); //HTTP 1.0

答案 1 :(得分:0)

......我正在请求错误的文件。 很抱歉浪费你的时间>。<

正如标题所示,当我想要/http/bhstudios/v2/prog/bhmi/database/get

时,我正在处理旧的网址方案/prog/bhmi/database/get