2012-10-15 191 views
1

我正在研究一個允許用戶下載JAR的應用程序,該應用程序實際上是一個PDF播放器,顯示一些PDF作爲JAR本身的一部分下載。未使用瀏覽器的HTTP請求

現在,無論用戶何時單擊該JAR文件,我想驗證服務器上的PDF包(是否已過期?或者有新版本可用)。另外,如果下載的軟件包的新版本可用,我希望我的PDF內容得到更新。所以如果有新版本的話,我需要從服務器上下載PDF文件。

所以我想從我的JAR內部向服務器發出一個HTTP請求,並收到一些PDF(以及一些其他數據)作爲響應。

任何想法我可以做到這一點?是否有一些API可用於從普通Java程序創建HTTP請求?

回答

2

通過創建URL並獲取連接並將其轉換爲HttpURLConnection來發送HTTP請求。

添加一個「If-Modified-Since」標題,並帶有本地文件的下載日期。如果服務器響應304(未修改),那麼您的本地版本是最新的。

如果本地版本不是最新的,服務器將用實際內容進行響應,您用它來更新本地緩存。

+0

感謝您的304狀態信息。這將有助於保持高效和快速。 – Vivek

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或類似物上。

1

正如其他人所指出的那樣,您可以使用HttpUrlConnection。但是,仍然有相當的工作量(不是很多,但數量相當)。

或者,退房basic-http-client。實際上,既然這是開源的,即使你打算編寫你自己的代碼,以獲得一些想法,也請檢查一下。

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