1

我正在开发一个允许用户下载 JAR 的应用程序,它实际上是一个 PDF 播放器,显示一些作为 JAR 本身的一部分下载的 PDF。

现在,每当用户单击该 JAR 文件时,我都想验证服务器上的 PDF 包(它是否过期?或者有新版本可用)。另外,如果有新版本的下载包可用,我希望我的 PDF 内容得到更新。因此,如果有新版本,我将需要从服务器下载 PDF。

所以我想从我的 JAR 中向服务器发出 HTTP 请求并接收一些 PDF(以及一些额外的数据)作为响应。

知道我该怎么做吗?是否有一些 API 可用于从普通 Java 程序创建 HTTP 请求?

4

5 回答 5

2

使用HttpUrlConnection。它应该完成任务。

于 2012-10-15T17:58:44.550 回答
2

通过创建 URL 并为其获取连接并将其转换为 HttpURLConnection 来发送 HTTP 请求。

添加“If-Modified-Since”标头,以及本地文件的下载日期。如果服务器响应 304(未修改),那么您的本地版本是最新的。

如果本地版本不是最新的,服务器将响应实际内容,您可以使用这些内容更新本地缓存。

于 2012-10-15T18:02:58.497 回答
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或类似的。

于 2012-10-15T18:05:15.543 回答
1

正如其他几个人所指出的,您可以使用 HttpUrlConnection。但是,仍然有相当数量(不是很多,而是相当数量)的工作。

或者,查看basic-http-client。实际上,由于它是开源的,即使您打算编写自己的代码,也请检查一下,以获得一些想法。

于 2012-10-15T18:05:23.093 回答
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(...){
   ...
 }  
于 2012-10-15T18:05:45.110 回答