Avatar billede netkoen Nybegynder
10. januar 2010 - 21:38 Der er 12 kommentarer

Login side problem ved download af HTML data

Hej Alle

Har har skrevet et lille program som henter data ud fra en tabel placeret på en hjemmeside. Jeg bruger Javas URL klasse til at hente alt kildekoden ud med.

Problemet er så at hjemmesiden er beskyttet af et login, så når jeg beder om en side via URL klassen får jeg bare login siden.

Jeg har login til siden, men aner ikke hvordan jeg skal "Logge ind" i selve java programmet og dermed få adgang til undersiderne.

Kan det overhovedet lade sig gøre og hvordan skulle det eventuelt gribes an?

Håber nogen har en løsning

Venlig Hilsen Daniel
Avatar billede arne_v Ekspert
11. januar 2010 - 00:08 #1
Fra lageret:

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
11. januar 2010 - 00:11 #2
Jeg bruger Jakarta Commons HttpClient fremfor den rå URL/URLConnection, fordi det er lidt nemmere.
Avatar billede netkoen Nybegynder
11. januar 2010 - 09:26 #3
Hej Arne..

Du er på pletten som altid.. Tak endnu engang..

Jeg skal lige hjem og prøve det, bliver muligvis i aften eller i morgen aften.
Avatar billede netkoen Nybegynder
11. januar 2010 - 15:14 #4
Hej Arne

Håber du lige kan hjælpe mig lidt.

Jeg har sat din kode ind og får selvfølgelig en masse fejl fordi Jakarta Commons HttpClient ikke er tilføjet.

Har derfor hentet HttpClient 4.0.1 (GA)fra http://hc.apache.org/downloads.cgi i zip, udpakket og dernæst tilføjet "jar" filen til projektet i netbeans under "Libraries".

Dette ændre dog ikke ved at den ikke kan finde de forskellige imports og kender heller ikke classen HttpClient. Jeg kan dog for lov at importe sun.net.www.http.httpClient, men regner ikke med det er den rigtige.

Nogle ideer eller er det bare mig der nosser op i det?

Hilsen Daniel
Avatar billede netkoen Nybegynder
11. januar 2010 - 15:39 #5
Ahaaaaa

Det er et gammelt eksempel hvilket gør at man skal bruge Commons HttpClient 3.1 (legacy) for at det virker..

Den tog lige lidt tid at fange..
Avatar billede arne_v Ekspert
11. januar 2010 - 15:46 #6
Eksemplet er ikke helt nyt.

Har de lavet meget om i API eller har de bare omdoebt nogle packages?
Avatar billede netkoen Nybegynder
11. januar 2010 - 15:56 #7
Jeg tror virkelig der er blevet lavet meget om..

Selvom jeg henter version 3.1 og ingen kompileringsfejl får, så når jeg laver et nyt objekt af Login og dernæst af HttpClient, så får jeg bare smidt følgende i hovedet:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
        at vestas.Login.<init>(Login.java:16)

Så ved ikke lige helt hvordan jeg skal løse problemet. Tror jeg i aften vil kigge på den lidt nyere version og se om jeg ikke kan få en løsning ud af det.
Avatar billede arne_v Ekspert
11. januar 2010 - 16:07 #8
Den fejl skyldes at den ikke kan finde commons-logging. Ligger den jar fil ikke i HttpClient 3.1 directory?
Avatar billede netkoen Nybegynder
11. januar 2010 - 18:48 #9
commons-logging ligger ikke med i filen.. Jeg fandt dog noget lignende på samme side, men det havde ingen effekt.

Har prøvet at importere version 4.0.1, men den virker mindst lige så dårligt...

Nogle bedre ideer?
Avatar billede arne_v Ekspert
11. januar 2010 - 19:08 #10
Jeg proever lige at teste i aften (= i nat dansk tid).
Avatar billede netkoen Nybegynder
11. januar 2010 - 19:17 #11
Så lykkedes det endelig - lidt mere omfattende end lige regnet med.

Du skal bruger to Jar filer mere, hhv. logging og codec som kan findes her:

http://commons.apache.org/downloads/download_logging.cgi

http://commons.apache.org/codec/download_codec.cgi

Så virker det faktisk...

Arne smid endelig et svar..
Avatar billede arne_v Ekspert
30. januar 2010 - 23:12 #12
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