petterg Skrevet 23. september 2011 Del Skrevet 23. september 2011 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
Hieronymus Skrevet 23. september 2011 Del Skrevet 23. september 2011 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
petterg Skrevet 30. september 2011 Forfatter Del Skrevet 30. september 2011 (endret) 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 30. september 2011 av petterg Lenke til kommentar
Hieronymus Skrevet 30. september 2011 Del Skrevet 30. september 2011 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
petterg Skrevet 30. september 2011 Forfatter Del Skrevet 30. september 2011 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
petterg Skrevet 30. september 2011 Forfatter Del Skrevet 30. september 2011 (endret) 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 30. september 2011 av petterg Lenke til kommentar
blackbrrd Skrevet 2. oktober 2011 Del Skrevet 2. oktober 2011 Jeg kan anbefale å bruke et egnet bibliotek til denne typen oppgave. F.eks Apache HttpComponents: http://hc.apache.org/ Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå