有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

远程文件的java下载统计信息

我现在正在努力解决的问题如下。我在远程服务器上有一个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文件来统计归档文件的下载统计数据


共 (2) 个答案

  1. # 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对象并打开一个steam:

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

    就是这样!不需要研究http头中的参数。这只是一个简单的问题,形成一个适当的字符串来打开连接

    我编写了一个简单的方法,检索请求所需的所有信息,并在从服务器下载文件的方法中插入了对它的调用

  2. # 2 楼答案

    您使用的是第三方网络计数器,它作为图形嵌入到您的网站中。当用户浏览器加载此图形时,第三方服务器会注意到访问并增加计数器

    这不适用于二进制下载,因为下载二进制文件时,不会请求webcounter图形

    您可以尝试的是,让Java程序在下载二进制文件时也下载计数器图形。确保将zip存档的URL作为Referer HTTP头传递给图像下载,以便服务器上的脚本将其视为对其的访问。您必须使用URLConnection类来设置自定义HTTP头,比如referer