Gå til innhold

Hvordan hente info fra webserver som krever innlogging?


Anbefalte innlegg

Jeg er i ferd med å starte på et lite programmeringsprosjekt som virker enkelt på alle områder bortsett fra ett: Programmet skal hente informasjon fra en webside som er skrevet i asp og krever innlogging. Innloggingen er lagret i en coockie og kommunikasjonen går over https. Hvordan går man frem for å få lastet ned fila med informasjonen?

Lenke til kommentar
Videoannonse
Annonse

Jeg er i ferd med å starte på et lite programmeringsprosjekt som virker enkelt på alle områder bortsett fra ett: Programmet skal hente informasjon fra en webside som er skrevet i asp og krever innlogging. Innloggingen er lagret i en coockie og kommunikasjonen går over https. Hvordan går man frem for å få lastet ned fila med informasjonen?

 

Dette eksemplet sender en POST, men bør kunne modifiseres til å bruke GET istedet:

 

http://www.java-samples.com/java/POST-toHTTPS-url-free-java-sample-program.htm

Lenke til kommentar

Tja. Den fungerte jo ikke særlig bra.

 

Følgende kommer ved kjøring:

Something bad just happened.
java.lang.IllegalStateException: Already connected
java.lang.IllegalStateException: Already connected
       at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpUR
LConnection.java:2668)
       at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl
.setRequestProperty(HttpsURLConnectionOldImpl.java:286)
       at sslpost.main(sslpost.java:34)

 

linje 34 er denne:

connection.setRequestProperty("Cookie", cuki);

Endret av petterg
Lenke til kommentar

Hei,

 

Jeg prøvde aldri eksemplet selv. Men nå har jeg laget et nytt eksempel, som jeg også har prøvd selv:

 

import java.io.*;
import java.net.*;
import java.security.Security.*;
import sun.misc.BASE64Encoder;

public class SSL {

 public static void main(String[] args) {
   try {
     java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
     URL url = new URL("https://www.securedsite.com");
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();

     connection.setDoOutput(true);

     BASE64Encoder encoder = new BASE64Encoder();

     String authString = "username:password";
     authString = encoder.encode(authString.getBytes());

     connection.setRequestProperty("Authorization", "Basic " + authString);
     OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());

     DataInputStream input = new DataInputStream(connection.getInputStream());

     String line = null;

     while ((line = input.readLine()) != null) {
       System.out.println(line);
     }

     input.close();
   } catch (Exception e) {
     System.out.println("Something bad just happened.");
     System.out.println(e);
     e.printStackTrace();
   }
 }
}

 

Bytt ut URL'en og sett riktig brukernavn og passord.

Lenke til kommentar

Det eksempelet prøver seg vel hverken med https, coockie eller POST?

 

Det den viser på skjerm er i hvertfall bare kildekoden til innloggingsiden - uten melding om feil login. Jeg ville gjettet at den prøver å autentisere slik det er om siden er beskyttet av .htaccess på apache? Her er det altså et form som bruker POST på loginsiden, og man må bruke coockies for å huske innloggingen for å hente andre sider enn hovedsiden (tror jeg).

 

 

(BASE64Encoder er vist også i ferd med å forsvinne fra jdk.)

Lenke til kommentar

Ved hjelp av eksempelet ditt, og eksempelet du postet først fant jeg ut hva som skapte feilkoden i sistnevnte - connection.getHeaderField - ser ut til å etablere forbindelsen. Da feiler stream'ene etterpå.

 

Nuvel, etter å ha fjernet coockie-delene av koden, og styrt det hele til en test-side i php som gjør noe så enkelt som å printe det den mottar i POST, ser jeg at den ikke mottar noe i POST fra javakoden...

 

 

Edit:

Med litt pakkesniffing på http, fant jeg headere som ikke stemte i det første eksempelet. Etter å ha fjernet dem får jeg i hvertfall riktig respons fra php-testen min... Men fra asp-siden jeg prøver å hente info fra kom beskjed om feil bruker/pass, noe det ikke er!

 

Edit2:

Det kan jo tenkes asp'n krever coockie som en del av autentiseringen...

Endret av petterg
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...