2012-09-04 38 views
1

我現在正在努力解決的問題如下。我在遠程服務器上有一個zip存檔。 Eclipse插件在我開發這一下載存檔使用建議從這個論壇:下載遠程文件的統計信息

//Connect readable channel to the URL 
ReadableByteChannel rbc = Channels.newChannel(libraryUrl.openStream()); 
//Create local file 
FileOutputStream fos = new FileOutputStream(libraryZipPath); 
//Download the remote archive to the local file 
fos.getChannel().transferFrom(rbc, 0, libraryUrl.openConnection().getContentLength()); 
//Close channel 
fos.close(); 

我在計數的網頁訪問統計服務器的HTML文件。這不計數的JavaScript如下:

var data = '&r=' + escape(document.referrer) + '&n=' + escape(navigator.userAgent) 
+ '&p=' + escape(navigator.userAgent) + '&g=' + escape(document.location.href); 
if (navigator.userAgent.substring(0,1)>'3') 
data = data + '&sd=' + screen.colorDepth + '&sw=' + escape(screen.width+'x'+screen.height); 

document.write('<a href="http://www.1freecounter.com/stats.php?i=89959" target=\"_blank\">'); 
document.write('<img alt="Free Counter" border=0 hspace=0 '+'vspace=0 src="http://www.1freecounter.com/counter.php?i=89959' + data + '">'); 
document.write('</a>'); 

的問題是:它在某種程度上可以使用這個JavaScript或HTML文件用它來計算歸檔文件的下載統計?

回答

1

謝謝你的答覆,菲利普!

我已經想出瞭如何使它以非常簡單的方式工作。讓我們在上面的示例中考慮一個計數器(「http://www.1freecounter.com/stats.php?i=89959」)。由該地址計數器發生在總共6個參數:

的R - 文件參照,

n和p是用戶代理,它由一個瀏覽器名稱,操作系統名稱,操作系統版本,瀏覽器版本等,

g是位置,

sd和sw是顏色深度和屏幕尺寸(我們可以跳過這兩個二進制文件)。

然後,我們爲計數請求形成一個字符串。例如,

String cntURL = "http://www.1freecounter.com/counter.php?i=89959&r="+ 
URLEncoder.encode("some string for a referrer","UTF-8") + "&n="+ 
URLEncoder.encode("browser name (OS name OS version) browser version", "UTF-8")+"&p="+ 
URLEncoder.encode("the same as above", "UTF-8")+"&g=<location string>"; 

請注意,參數編碼爲utf-8字符集。否則,計數器將不能正確計數訪問。

然後,只需使用URL類,我們創建一個URL對象並打開蒸汽:

URL statsUrl = new URL(cntURL); 
statsUrl.openStream(); 

這就是它!沒有必要研究http頭中的參數。這僅僅是形成一個適當的字符串來打開連接的問題。

我已經寫了一個簡單的方法來檢索請求所需的所有信息,並在我從服務器下載文件的方法中插入了對它的調用。

1

您正在使用作爲圖形嵌入到您的網站中的第三方網絡計數器。當用戶瀏覽器加載此圖形時,第三方服務器會通知訪問並遞增計數器。

這不適用於二進制下載,因爲下載二進制文件時,不會請求webcounter圖形。

你可以嘗試的是讓你的Java程序在下載二進制文件時也下載計數器圖形。確保將zip存檔的URL作爲Referrer HTTP標頭傳遞給圖像下載,以便服務器上的腳本將其視爲對其的訪問。您將必須使用URLConnection類來設置像Referrer這樣的自定義HTTP頭。