【问题标题】:HTTP Request without using Browser不使用浏览器的 HTTP 请求
【发布时间】:2012-10-15 17:56:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java http jar httprequest httpresponse


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您提供 304 状态信息。这将真正有助于保持高效和快速。
    【解决方案2】:

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

    【讨论】:

    • 谢谢。这正是我想要的
    【解决方案3】:

    对于我使用的原始二进制数据;

    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 或类似的。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:
        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(...){
           ...
         }  
        

        【讨论】:

          猜你喜欢
          • 2017-07-28
          • 1970-01-01
          • 2015-02-23
          • 2016-06-15
          • 2012-06-22
          • 2012-06-12
          • 2012-07-15
          • 2019-08-26
          • 1970-01-01
          相关资源
          最近更新 更多