Avatar billede jespersahner Nybegynder
25. februar 2006 - 19:34 Der er 3 kommentarer og
1 løsning

Sende XML-dokument til server

Jeg læser fra en webside og ønsker at anvende W3C DOM til at parse dokumentet og derefter sende det tilbage til serveren.

En anvendelse kunne være at udfylde en form vha. Element.setAttribute() osv.

Mit spm. er nu, hvordan jeg sender den udfyldte form tilbage til serveren, når jeg har modificeret dokumentet?
_____________________

Baggrund:
Med f.eks. HttpClient kan jeg læse fra en webside, og HttpClient giver også mulighed for at fylde en form ud og sende den tilbage. Koden kunne se således ud:

HttpClient client = new HttpClient();
PostMethod pm = new PostMethod("http://www.eksperten.dk");
        NameValuePair userid  = new NameValuePair("login_username", "jespersahner");
        NameValuePair password = new NameValuePair("login_password", "xxxx");
        pm.setRequestBody(new NameValuePair[] {userid, password});
client.executeMethod(pm);

Dette er som udgangspunkt fint nok. Jeg kunne nu godt tænke mig at bruge W3C DOM i kommunikationen med serveren. Jeg ønsker at læse fra en webside og parse det læste med W3C DOM og derefter sende tilbage til serveren, hvor jeg f.eks. har udfyldt en form vha. Element.setAttribute() osv.
Avatar billede arne_v Ekspert
25. februar 2006 - 23:57 #1
det kan du ikke

en form submit sendes nemlig ikke som HTML/XML
Avatar billede arne_v Ekspert
25. februar 2006 - 23:58 #2
din kode sender kun:

login_username=jespersahner&login_password=xxxx

som body i HTTP request
Avatar billede jespersahner Nybegynder
27. februar 2006 - 01:38 #3
->arne_v: Det er vist noget vrøvl jeg skriver. Sagen er, at jeg ønsker at aflæse indholdet af en webside og i visse tilfælde sende requests tilbage.

Når man udfylder en form, kan det ske på 2 måder:
- GET/POST-HTTP request
- JavaScript

I forbindelse med kommunikation med en webside har jeg kig på en række værktøjer:
- HttpClient
- HtmlUnit
- HttpUnit
- JExplorer (kommercielt)
- JDIC (Sun-API)

De to sidste værktøjer adskiller sig fra de øvrige ved, at de wrapper default-browseren ind i Java. I JExplorer (wrapper kun IE-browseren) fungerer det oven i købet på den måde, at man arbejder med et W3C DOM-dokument, som man modificerer (f.eks. udfylder en form), som man så efterfølgende submit'er. Jeg er derfor lidt nysgerrig efter at forstå, hvordan dette modificerede W3C DOM-dokument sendes tilbage til serveren (deraf mit spm.). Teknikken må være noget med, at JExplorer parser det modificerede dokument og så enten danner et HTTP-request (jf. din bemærkning) eller danner et JavaScript, som så submit'es. Det giver ikke mening at sende det modificerede dokument tilbage i ren form så at sige, hvilket jeg først tænkte. Jeg skal nok bruge noget HTTP-logging, hvis jeg vil tættere på denne del omkring HTTP-request eller JavaScript.

I øvrigt omkring valg af værktøj, som jeg har spurgt til tidligere:
Jeg er lidt lun på tanken om at anvende et værktøj, der wrapper en browser i stedet for at emulere samme teknik i Java. Min fornemmelse er, at der ved aflæsning af en webside kan være en række problemer omkring cookies, ikke-korrekt HTML, JavaScript, frames, iframes osv., som kan være svære at løse konsekvent i et rent Java-miljø (værktøjerne implementer da også andre værktøjer, der f.eks. foretager tilretning af HTML-kode (NekoHTML), fortolkning af JavaScript-kode (Rhino) m.m.).

Et værktøj, der wrapper f.eks. IE-browseren, løser automatisk disse problemer, da problemerne håndteres i IE-browseren. Oven i købet kan man måske hævde, at man skal vælge at wrappe IE-browseren og ikke en anden browser, da visse hjemmesider kun vises korrekt i IE (det er måske fortid nu, men Opera har ikke altid vist tingene på samme måde, hvorimod Firefox minder mere om IE i sin præsentation).

Jeg er dog ikke klar over, om et værktøj, der wrapper en browser, alt andet lige eksekverer noget langsommere end et rent Java-værktøj.

Jeg må dog sige, at både JDIC og JExplorer forekommer at være elegante og nogenlunde letanvedelige værktøjer - og oven i købet med visuel præsentation, hvis man ønsker det. Specielt er dokumentationen af JExlorer rigtig god, hvor JDIC endnu er meget "fersk" og endnu ikke særlig dokumenteret.

Kommenter gerne og smid gerne et svar.
Avatar billede arne_v Ekspert
27. februar 2006 - 03:06 #4
jeg kan ikke sige meget

jeg har aldrig brugt de 2 sidste tools

hvis du vil vide hvad der bliver sendt over nettet saa hent Apache Axis

udover at det er et glimrende web service toolkit saa kommer det ogsaa med
et tool tcpmon

saa koerer du:

app-----(HTTP localhost:8081)------tcpmon-----(HTTP localhost:8080)------server

eller noget lignende

tcpmon forwarder baade request og respons transperent

og du kan se request og respons i en GUI

fedt tool

og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester