不使用浏览器的HTTP请求

时间:2012-10-15 17:56:56

标签: java http jar httprequest httpresponse

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

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

所以我想从我的JAR&内部向服务器发出HTTP请求。接收一些PDF(以及一些其他数据)作为响应。

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

5 个答案:

答案 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(...){
   ...
 }