Scratch Geschrieben 3. November 2005 Geschrieben 3. November 2005 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 Zitieren
Scratch Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.