1

私は、ユーザーが JAR をダウンロードできるようにするアプリケーションに取り組んでいます。これは実際には、JAR 自体の一部としてダウンロードされた PDF を表示する PDF プレーヤーです。

ユーザーがその JAR ファイルをクリックするたびに、サーバー上の PDF バンドルを検証したいと思います (有効期限が切れたかどうか、または新しいバージョンが利用可能かどうか)。また、ダウンロードしたバンドルの新しいバージョンが利用可能になった場合に、PDF コンテンツを更新したいと考えています。そのため、新しいバージョンがある場合は、サーバーから PDF をダウンロードする必要があります。

したがって、JAR 内からサーバーに HTTP リクエストを送信し、応答としていくつかの PDF (およびいくつかの追加データ) を受け取りたいと考えています。

どうすればこれを行うことができますか?プレーンな Java プログラムから HTTP リクエストを作成するために使用できる API はありますか?

4

5 に答える 5

2

URLを作成してその接続を取得し、それをHttpURLConnectionにキャストして、HTTPリクエストを送信します。

ローカルファイルのダウンロード日を含む「If-Modified-Since」ヘッダーを追加します。サーバーが304(変更されていない)で応答する場合、ローカルバージョンは最新です。

ローカルバージョンが最新でない場合、サーバーは実際のコンテンツで応答します。これを使用してローカルキャッシュを更新します。

于 2012-10-15T18:02:58.497 に答える
2

HttpUrlConnectionを使用します。それはタスクを実行する必要があります。

于 2012-10-15T17:58:44.550 に答える
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 に答える