Avatar billede daniboy Nybegynder
20. marts 2003 - 22:26 Der er 14 kommentarer og
2 løsninger

Poste til en Server med METHOD=POST

Hejsa...

Jeg har et problem... hvordan skal de dataer man poster til en webserver se ud?...

Jeg har følgende kode som jeg har taget fra en guide om POST til en webserver... jeg ved godt hvad der sker i koden jeg aner bare ikke hvordan den string i argumentet body til den metode skal se ud...

// Daniboy

Koden:

    static public String getURLPostString(URL url, String body) {
        StringBuffer sb = new StringBuffer();

// find the newline character(s) on the current system
        String newline = null;
        try {
            newline = System.getProperty("line.separator");
        } catch (Exception e) {
            newline = "\n";
        }

        try {
    // URL must use the http protocol!
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setAllowUserI/msg q@cserve.quakenet.org auth Daniboy stwwrrznnteraction(false); // you may not ask the user
            conn.setDoOutput(true); // we want to send things
            // the Content-type should be default, but we set it anyway
            conn.setRequestProperty( "Content-type", "application/x-www-form-urlencoded" );
            // the content-length should not be necessary, but we're cautious
            conn.setRequestProperty( "Content-length", Integer.toString(body.length()));
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
           
            // get the output stream to POST our form data
            OutputStream rawOutStream = conn.getOutputStream();
            PrintWriter pw = new PrintWriter(rawOutStream);
   
            pw.print(body); // here we "send" our body!
            pw.flush();
            pw.close();

            // get the input stream for reading the reply
            // IMPORTANT! Your body will not get transmitted if you get the
            // InputStream before completely writing out your output first!
            InputStream  rawInStream = conn.getInputStream();
   
            // get response
            BufferedReader rdr = new BufferedReader(new InputStreamReader(rawInStream));
            String line;

            while ((line = rdr.readLine()) != null) {
                sb.append(line);
                sb.append(newline);
            }
            return sb.toString();
        } catch (Exception e) {
    System.out.println("Exception "+e.toString());
    e.printStackTrace();
}
        return ""; // an exception occurred
    }
Avatar billede arne_v Ekspert
20. marts 2003 - 22:27 #1
feltnavn1=feltværdi1&feltnavn2=feltværdi2
Avatar billede arne_v Ekspert
20. marts 2003 - 22:29 #2
Hvis I vil simulere:

<input type="text" name="f1" size="10">
<input type="text" name="f2" size="20">

med værdierne 123 og ABC indtastet, så er det:

f1=123&f2=ABC
Avatar billede disky Nybegynder
20. marts 2003 - 22:29 #3
parameter1=value1&parameter2=value2
osv

altså:
feltnavn=værdi

du kan have flere af dem, de er adskilt med '&'
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:29 #4
Hvis det nu ikke virker?... hvor kan problemet så ligge?
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:30 #5
Den side jeg poster til fortæller mig at det er en loginerror
Avatar billede arne_v Ekspert
20. marts 2003 - 22:32 #6
"ikke virker" er lidt svært at troubleshoote.

Hvad sker der ?
Avatar billede arne_v Ekspert
20. marts 2003 - 22:33 #7
Åh nej.

Det tyder på at der er en login-side der ved successfuld login
sætter en cookie elerligende og at den side i POST'er til checker
på den cookie.

Kan godt være tricky at få til at virke !

:-(
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:36 #8
Ja jeg tænkte nok det var det der er problemet... Kan du så give mig en idé om hvad der skal gøres ved det? =)
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:37 #9
Poster til samme siden som dataerne skal hentes fra
Avatar billede arne_v Ekspert
20. marts 2003 - 22:40 #10
I bliver nødt til første at "logge ind" (formentlig også
en POST request) og derefter lave jeres POST request.
Og håndtere de cookies.
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:44 #11
Det kan da næsten umuligt værre det som en almindelig browser gør?...

Det skal lige siges at siden smider en random session cookie... tror jeg nok det heder :)

Så om dit princip virker er jeg ikke helt sikker på... men det skal vel testes
Avatar billede arne_v Ekspert
20. marts 2003 - 22:46 #12
Jo.

Hvorfor tror du MSIE fylder så mange MB?  :-)

Jo.

browser requester login side
server sender login side
browser sender login data
server sender OK side + cookie
browser gemmer cookie i memory
browser requester side
server checker om cookie er der
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:48 #13
Ja ok et eller andet skal de vel give skylden :)

Hvis det er fakta så er der vel ikke andet at gøre end at gå i krig
Avatar billede arne_v Ekspert
20. marts 2003 - 22:50 #14
Jeg er bange for at det er fakta.

Mit bedste råd vil være at prøve at finde et library der kan sådan
noget og bruge det i.s.f. at gå igang med at kode selv.
Avatar billede daniboy Nybegynder
20. marts 2003 - 22:53 #15
Jeg ved godt hvordan jeg skal hente en cookie ud af en conn... har lavet noget kode der henter en side og gemmer Cookien... nu skal det vel bare bixet sammen på den ene eller anden måde... og jo jeg har set der findes forskellige librarys derude... men det er sjovere at gøre det selv... det er ikke noget seriøst bare for at lære lidt java via selvstudium... :)
Avatar billede daniboy Nybegynder
22. marts 2003 - 16:16 #16
All right har valgt at bruge et library det andet er for bøvlet... Vil gerne værre færdig med programmet uden at det tager en hel krig.. :)...

Jeg giver lidt points til jer begge 2...

// Daniboy
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