我正在开发一个允许用户下载JAR的应用程序,这些JAR实际上是一个显示一些PDF的PDF播放器,这些PDF作为JAR本身的一部分下载。
现在每当用户点击该JAR文件时,我想验证服务器上的PDF包(是否已过期?或者是否有新版本)。此外,如果下载的捆绑包的新版本可用,我希望我的PDF内容得到更新。因此,如果有新版本,我需要从服务器下载PDF。
所以我想从我的JAR&内部向服务器发出HTTP请求。接收一些PDF(以及一些其他数据)作为响应。
知道我怎么能这样做吗?是否有一些API可用于从普通Java程序创建HTTP请求?
答案 0 :(得分:2)
使用HttpUrlConnection。它应该完成任务。
答案 1 :(得分:2)
通过创建URL并获取其连接并将其投射到HttpURLConnection来发送HTTP请求。
添加“If-Modified-Since”标题,以及本地文件的下载日期。如果服务器响应304(未修改),那么您的本地版本是最新的。
如果本地版本不是最新版本,服务器将使用您用于更新本地缓存的实际内容进行响应。
答案 2 :(得分:1)
对于我使用的原始二进制数据;
public static byte[] getContent(String s) {
try {
URL u = new URL(s);
URLConnection c = u.openConnection();
//we lie, java user-agents are sometimes blacklisted
c.setRequestProperty("User-Agent", "MSIE 7.0");
InputStream r = c.getInputStream();
String ret = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(r));
for(String line; (line = reader.readLine()) != null;) ret += line;
return ret.getBytes();
}
catch(Exception e) { e.printStackTrace(); }
return new byte[0];
}
然后可以将其传送到FileOutputStream
或类似的。
答案 3 :(得分:1)
正如其他几个人所说,您可以使用HttpUrlConnection。然而,仍有相当数量(不是很多,但相当数量)的工作。
或者,查看basic-http-client。实际上,既然这是开源的,即使你打算编写自己的代码,也要查看它,以获得一些想法。
答案 4 :(得分:1)
URL url;
HttpURLConnection connection = null;
try {
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
.....
//Send request
DataOutputStream wr = new DataOutputStream (connection.getOutputStream ());
wr.writeBytes (urlParameters);
.......
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
....read the contents
}catch(...){
...
}