java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Netzwerkprogrammierung

Netzwerkprogrammierung Fragen zu Client-/Server-Programmierung sowie zu verteilten Anwendungen (RMI, CORBA etc.)

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 13.04.2012, 09:08   #1 (permalink)
Neuer Benutzer
short
 
Registriert seit: 03.08.2011
Fachbeiträge: 18
Abgegebene Danke: 7
Erhielt 0 Danke für 0 Beiträge
Standard HTMLUNIT Formularfüll Versuch

Hi, ich möchte das folgende Formular mittels HTMLUNIT 2.9 auführen/absenden:
(Es generiert einen Link zu einer Datei.Beim Klicken auf den Downloadbutton, ließt er den von mir eingegeben DateiLink, läd die Datei auf den Server der Seite und öffnet mir direkt ein Downloadfenster
wo ich die Datei auf der Platte speichern kann)

HTML-Code:
</form>
         <script type="text/javascript">
	function dl_direct()
	{
							document.getElementById('peppeeppeeppepppe_more_p_and_e_and_so_on').action = '/';
		document.getElementById('peppeeppeeppepppe_more_p_and_e_and_so_on').submit();
	}
	function default_download()
	{
					document.getElementById('peppeeppeeppepppe_more_p_and_e_and_so_on').action = '/?type=tp';
		document.getElementById('peppeeppeeppepppe_more_p_and_e_and_so_on').submit();
	}
    </script>
        <div align="center" style="">
    <input type="hidden" name="freedisk" value="19630088192" />
    <form action="/" id="peppeeppeeppepppe_more_p_and_e_and_so_on" name="transload" method="post">
   <div style="display:block;margin:0 auto;text-align:center"> <input type="text" name="link" style="width: 300px" /></div>
    <input name="sessid" value="hutnu5ocbfe340ub9l1ep4djb2" type="hidden"  />
    <div style="display:block;margin:0 auto;text-align:center"><input value="Direct download" type="button" onclick="dl_direct();" /><input value="Download through server"disabled="disabled" type="button" onclick="default_download();" style="margin-left:20px;" /></div>

	<input type="checkbox" name="premium_acc" checked="checked" style="display:none" />

    </form>
Dazu habe ich folgenden JAV Code geschrieben:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Create and initialize WebClient object
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3.6);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setRefreshHandler(new RefreshHandler() {
            public void handleRefresh(Page page, URL url, int arg) throws IOException {
                System.out.println("handleRefresh");
            }
 
        });
        
        
        HtmlPage currentPage = 
                webClient.getPage(dieSeite);
        
        //Enable JavaScript
        currentPage.getWebClient().setJavaScriptEnabled(true);
        // Execute JavaScript
        //ScriptResult result = currentPage.executeJavaScript(JavaScriptCode);
                
        //Cookies
        Set cookies = webClient.getCookieManager().getCookies();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + " = " + cookie.getValue());
        }
        
        //Response HEaders
        List headers = 
            currentPage.getWebResponse().getResponseHeaders();
        for (NameValuePair header : headers) {
            System.out.println(header.getName() + " = " + header.getValue());
        }
 
        //Request parameters
        List headers = 
            currentPage.getWebResponse().getResponseHeaders();
        for (NameValuePair header : headers) {
            System.out.println(header.getName() + " = " + header.getValue());
        }
                        
        HtmlForm form = currentPage.getFormByName("transload");
 
        // Enter Link
        form.getInputByName("link").setValueAttribute(derLinkDerÜbergebenWerdenSoll);
        //form.getInputByName("sessid").setValueAttribute("on");
        //form.getInputByName("premium_acc").setValueAttribute("checked");
        
        // Click button/link
        currentPage = (HtmlPage) form.getInputByValue("Direct download").click();
        
        System.out.println(page.asXml());



Meiner Meinung nach müsste ich alle "inputs" des Formulars füllen oder?
Also die 3 hier:

input type="text" name="link"
input name="sessid" value="hutnu5ocbfe340ub9l1ep4djb2"
input type="checkbox" name="premium_acc" Wie wird ein CheckboxValue gesetzt?

Wenn ich die Inputparameter gesetzt habe, muss ich den Button des Formulars input value="Direct download" betätigen oder?
Allerdings bekomme ich dann die nächste Seite zurück und nicht die Datei. Das liegt wahrscheinlich daran, dass die Datei direkt zum Speichern angeboten wird. Weiß jemand wie ich dieses Fenster abfangen kann?
tommey ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 13.04.2012, 11:37   #2 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 29.01.2012
Fachbeiträge: 778
Abgegebene Danke: 0
Erhielt 67 Danke für 67 Beiträge
tja ... da ist der hoster etwas schlauer und geht erfolgreich gegen "download-programme" vor ...

1) du müsstest ALLE inputs RICHTIG setzen ... also auch das hidden "freedisk" ... und die sessionid bekommst du meist via cookie oder iwie anders
2) CheckBox value : entweder TRUE *für haken drin* oder FALSE *für kein haken drin* ... radiobuttons/groups funktionieren ähnlich
3) ich kenne HTMLUNIT zwar nicht ... aber was meinst du mit "dl fenster abfangen" ? ums dir mal zu erklären : diesen dialog macht der browser auf wenn er daten bekommt mit denen er nichts anfangen kann *meist application/octet-stream* und darauf hin auf platte speichern will ... und genau diese daten kannst du auch mit java lesen


ums dir mal einfach zu machen : zieh dir wireshark und guck was dein browser an den server sendet um das file dierekt zu laden ... und genau das sendest du dann auch *z.b. über raw-sockets ... URL ... apache commons ... etc* und speicherst dann die daten die als antwort kommen OHNE http-header in ein file
irgendjemand ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
tommey (13.04.2012)
Alt 13.04.2012, 12:18   #3 (permalink)
Neuer Benutzer
short
Themenstarter
 
Registriert seit: 03.08.2011
Fachbeiträge: 18
Abgegebene Danke: 7
Erhielt 0 Danke für 0 Beiträge
Hmm, du meinst also per z.B. apache http client aufmachen und ganz easy über POST bzw GET die Sachen holen und senden?
Ich dachte das geht nicht, weil die Seite alles über JavaScript macht. Deshlab wollte ich auch nen Browser nachbilden und mir so die Sachen holen.

Ich werds mal probieren, wenn nicht, meld ich mich hier nochmal
Danke erstmal
tommey ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 13.04.2012, 15:54   #4 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 29.01.2012
Fachbeiträge: 778
Abgegebene Danke: 0
Erhielt 67 Danke für 67 Beiträge
Zitat: tommey
Beitrag anzeigen
Hmm, du meinst also per z.B. apache http client aufmachen und ganz easy über POST bzw GET die Sachen holen und senden?
Ich dachte das geht nicht, weil die Seite alles über JavaScript macht. Deshlab wollte ich auch nen Browser nachbilden und mir so die Sachen holen.

Ich werds mal probieren, wenn nicht, meld ich mich hier nochmal
Danke erstmal
so dachte ich das zumindest ...

aber wie ich sagte : der hoster wird wohl etwas schlauer sein als das man es so einfach umgehen könnte *eben da die seite via JS läuft*

und ob HTMLUNIT in der lage ist z.b. FF3.6 100% nachzubilden wage ich alleine wegen den limitierungen der JVM zu bezweifeln ...
zwar hat java eine JS runtime *auch für einige andere script-sprachen* ... aber ob diese dann so funktionieren wie in einem browser ist fraglich ... da man zumindest die calls neu binden und auch sonst eventuelle resourcen und "system"-calls nachbauen müsste ...

das mag man zwar für eine bestimmte website mal schaffen ... aber ein framework was dann mit allen seiten umgehen kann ... das wird schwer bis vermutlich nicht möglich sein ...

ergo : selber schreiben ... wobei dir z.b. apache commons für den datenaustausch mit dem http-server ein stück weit abnehmen kann ...

Edit:
ich hab mir mal schnell HtmlUnit gegoogled ... und ich denke das es weit von dem entfernt ist was du dir darunter vorstellst ... denn HtmlUnit ist KEIN framework um einen "GUI-less" browser in java zu implementieren ... sondern sollte vielmehr als bestandteil von z.b. JUnit gesehen werden ...

demnach wird dir vermutlich nicht viel übrig bleiben als genau für die seite mit der du arbeiten willst einen großteil des code selbst zu schreiben ...

Geändert von irgendjemand (13.04.2012 um 15:58 Uhr)
irgendjemand ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Proxy Authentifizierung HtmlUnit Sunchezz Netzwerkprogrammierung 8 21.12.2010 23:25
(HTTP) HtmlUnit... Seite "offen halten" bzw. darauf verweilen Phorx Netzwerkprogrammierung 4 05.03.2010 19:00
HtmlUnit - Grafik speichern HtmlUnit User Java Basics - Anfänger-Themen 2 25.02.2010 19:39
HtmlUnit - allgemeine Frage zum "ans Laufen bringen" oetzi Web Tier 1 15.12.2009 13:36
HTMLUnit arbeit sehr langsam . Alternative? Jake2.0 Netzwerkprogrammierung 6 10.01.2009 09:13


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de