Veröffentlicht 3. November 200519 j Hi, ich habe mir ein kleines Java Programm geschrieben das bei Eingabe einer URL den Quellcode anzeigt. Vor kurzem hab ich jedoch eine Seite erwischt mit einem kleinen Skript (cgi script schätze ich) bei dem die Ausgabe ein HTTP 302 (Document Found) Status ist. Da aber zB ein Browser die richtige Seite direkt aufruft, ohne den Status anzuzeigen, möchte ich das natürlich auch. Dabei stosse ich aber auf ein paar Problemchen. java.net.HttpURLConnection hier ist beschrieben das FollowRedirects und InstanceFollowRedirects default auf true sind, also eine Weiterleitung bei HTTP Status 3xx stattfinden sollte ... Ich habe jetzt nochmal explizit beide Werte auf true gesetzt aber es funktioniert nicht Weiss jemand weiter ?? Danke!! Gruß Scratch
3. November 200519 j Autor Hier noch der Code ... public String parse(String strUrl) throws ConnectException { strContent = ""; try { if((strUrl != null) && (strUrl.startsWith("https"))) { System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol"); java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); } // Timeouts setzen propertiesSystem.setProperty("sun.net.client.defaultConnectTimeout",5000); propertiesSystem.setProperty("sun.net.client.defaultReadTimeout",5000); // Proxy setzen enableProxy(); URL url = new URL(strUrl); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); huc.setFollowRedirects(true); huc.setInstanceFollowRedirects(true); huc.setDoOutput(true); huc.setDoInput(true); if(getMethod().equals("POST")) { huc.setRequestMethod("POST"); huc.setRequestProperty("Content=length",String.valueOf(strPostParameters.getBytes().length)); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(huc.getOutputStream()); outputStreamWriter.write(strPostParameters); outputStreamWriter.flush(); outputStreamWriter.close(); } else { huc.setRequestMethod("GET"); huc.connect(); } InputStream inputStream = huc.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream,getCharSet()); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String strTempContent = bufferedReader.readLine(); while(strTempContent != null) { strContent += strTempContent; strTempContent = bufferedReader.readLine(); strContent += "\n"; } bufferedReader.close(); inputStreamReader.close(); inputStream.close(); // Proxy entfernen disableProxy(); // Timeouts entfernen System.getProperties().remove("sun.net.client.defaultConnectTimeout"); System.getProperties().remove("sun.net.client.defaultReadTimeout"); huc.disconnect(); } catch(ConnectException e) { throw e; } catch(Exception e) { e.printStackTrace(); } return strContent; } Die Ausgabe ist leider ... <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>302 Found</TITLE> </HEAD><BODY> <H1>Found</H1> The document has moved <A HREF="http://...">here</A>.<P> <HR> <ADDRESS>Apache/1.3.31 Server at ... Port 443</ADDRESS> </BODY></HTML> und nicht die eigentliche Seite.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.