Avatar billede riversen Nybegynder
26. september 2009 - 08:22 Der er 7 kommentarer og
1 løsning

jakarta httpclient

Hej,

jeg benytter jakarta httpclient, hvor jeg logger ind på et website (basic authentication) og poster nogle data.

Jeg vil nu gerne lave support for form based authentication, men kan ikke rigtig få det til at spille. Jeg har søgt lidt uden at finde noget der hjælper mig i mål, så håber nogen kan lave et eksempel, hvor der logges ind og så laves et post til en underliggende side.

/René
Avatar billede arne_v Ekspert
26. september 2009 - 15:05 #1
Gammel eksempel:

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class Login {
    private HttpClient client;
    public Login() {
        client = new HttpClient();
    }
    public void login(String url, String userField, String userValue, String passField, String passValue) throws Exception {
        NameValuePair[] nvp = new NameValuePair[2];
        nvp[0] = new NameValuePair(userField, userValue);
        nvp[1] = new NameValuePair(passField, passValue);
        post(url, nvp);
    }
    public String get(String url) throws Exception {
        GetMethod met = new GetMethod(url);
        try {
            client.executeMethod(met);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return met.getResponseBodyAsString();
    }
    public String post(String url, NameValuePair[] nvp) throws Exception {
        PostMethod met = new PostMethod(url);
        if (nvp != null) {
            met.setRequestBody(nvp);
        }
        try {
            client.executeMethod(met);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return met.getResponseBodyAsString();
    }
    public static void main(String[] args) throws Exception {
        Login lgi = new Login();
        lgi.login("http://www.eksperten.dk/logind.phtml", "login_username", args[0], "login_password", args[1]);
        System.out.println(lgi.get("http://www.eksperten.dk/spm/700015"));
    }
}
Avatar billede arne_v Ekspert
26. september 2009 - 15:13 #2
Den virkede dengang.

Jeg forventer at den vil virke med naesten alle form baserede login systemer med undtagelse af ASP.NET web forms.
Avatar billede riversen Nybegynder
27. september 2009 - 08:14 #3
jeg får en status 200 ved login men når jeg forsøger at poste data får jeg 440. Siden jeg poster til efterfølgende har jo ingen login form

Lidt ala log ind på eksperten og derefter opret et spørgsmål
Avatar billede arne_v Ekspert
27. september 2009 - 15:16 #4
Ved login burde du få en cookie tilbage som HttpClient gemmer og sender med alle de eftrefølgende requests.
Avatar billede arne_v Ekspert
27. september 2009 - 15:16 #5
Måske du skulle sniffe lidt HTTP traffik med TCPMon og se hvad browser og dit program sender.
Avatar billede arne_v Ekspert
22. oktober 2009 - 23:15 #6
Kommet videre ?
Avatar billede riversen Nybegynder
18. august 2010 - 17:01 #7
Har ikke haft lejlighed til at komme videre med det. Jeg vender tilbage i ny tråd, når jeg får tid. Læg et svar, hvis du vil have point.
Avatar billede arne_v Ekspert
18. august 2010 - 18:04 #8
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