Problem, z którym się spędziłem, jest następujący. Mam archiwum zip na zdalnym serwerze. Wtyczka z Eclipse'a opracowałem pobieranie do pobierania archiwum za pomocą sugestii z tego forum:

//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();

Mam plik HTML na serwerze, który liczy odwiedzić statystyki dla strony internetowej. JavaScript, który liczy się w następujący sposób:

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>');

Pytanie brzmi: czy w jakiś sposób można użyć tego pliku JavaScript lub HTML z nim, aby policzyć statystyki pobierania pliku archiwum?

1
NeoSer 4 wrzesień 2012, 13:23

2 odpowiedzi

Najlepsza odpowiedź

Dziękuję za odpowiedź, Philipp!

Zrozumiałem, jak działać w bardzo prosty sposób. Rozważmy licznik w powyższym przykładzie ("http://www.1freecounter.com/stats.php?i=89959"). Licznik tego adresu łącznie łącznie 6 parametrów:

R - Dokument polecony,

N i P są agentem użytkownika, który składa się z nazwy przeglądarki, nazwy OS, OS Ver, przeglądarki Ver itp,

G to lokalizacja,

SD i SW to głębokość koloru i rozmiar ekranu (możemy pominąć te dwa do pliku binarnego).

Następnie tworzymy ciąg żądania liczenia. Na przykład,

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>";

Zauważ, że parametry są zakodowane do zestawu znaków UTF-8. W przeciwnym razie licznik nie liczy dostępu prawidłowo.

Następnie, po prostu używając klasy URL, tworzymy obiekt URL i otwieramy parę:

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

To jest to! Nie ma potrzeby badania, jakie parametry są w nagłówku HTTP. Jest to po prostu kwestia tworzenia odpowiedniego ciągu, do którego należy otworzyć połączenie.

Napisałem prostą metodę, która pobiera wszystkie informacje wymagane do żądania i włożono do niego połączenie w sposób, w którym pobieram plik z serwera.

1
NeoSer 13 wrzesień 2012, 16:23

Używasz strony internetowej strony trzeciej, która jest osadzona jako grafika na swojej stronie internetowej. Gdy przeglądarka użytkowników ładuje tę grafikę, serwer trzeciego partii zauważa dostęp i zwiększa licznik.

Nie działa to dla pobrań binarnych, ponieważ gdy plik binarny jest pobierany, grafika WebCounter nie jest wymagana.

To, czego możesz spróbować, aby Twój program Java również pobierał grafikę licznika po pobraniu pliku binarnego. Upewnij się, że przejdź do adresu URL archiwum ZIP jako nagłówek nagłówka HTTP do pobierania obrazu, aby skrypt na serwerze liczy go jako dostęp do niego. Będziesz musiał użyć klasy URLConnection, aby ustawić niestandardowe nagłówki HTTP, takie jak polecony.

1
Philipp 4 wrzesień 2012, 09:43