HTTP Falscher Code per url.openStream()

pzypher

Aktives Mitglied
Hallo,

wenn ich einen HTML Code aus einer Website lesen möchte, tritt bei manchen Websites der Fall auf, dass der Server meint ich (das Java Programm) sei ein mobiles Gerät und antwortet mir mit der mobilen Version. Ich möchte jedoch immer den "Standard HTML Code" zurückbekommen.

Ist es irgendwie möglich, das Java Programm als "normalen" Browser (für PCs) zu tarnen?

Der Vollständigkeit halber hier der Code zum Auslesen:
Java:
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.util.Scanner;
import java.io.File;
import java.io.FileWriter;
 
class Main { 
  public static void main( String[] args ) { 
	    
	  	InputStream is = null;
		File file = new File("/home/user/testfile");
		
		try {
			FileWriter writer = new FileWriter(file, false);
			
			URL url = new URL( "http://www...." ); 
		    is = url.openStream();
		    writer.write( new Scanner(is).useDelimiter("//html//").next() ); 
		    writer.flush();
		} catch (Exception ex) {
			System.out.println("Fehler: " + ex.getMessage());
		} finally { 
		      if ( is != null ) 
		        try { is.close(); } catch ( IOException e ) { } 
	    } 
	  } 
}

Zusatz: Bei The Internet Movie Database (IMDb) bekomme ich überhaupt sogar eine 403 zurück - liegt wohl daran dass sie keinen automatisierten Zugriff wünschen...

Danke

PS: Ich habe natürlich nichts Verbotenes vor...
 
Zuletzt bearbeitet:
Du solltest da ein paar HTTP Header setzen, beispielsweise
Code:
User-Agent
. Daran wird oft festgemacht ob es sich um einen mobilen Browser handelt oder nicht. Auch so Sachen wie
Code:
Referer
,
Code:
Accept
,
Code:
Accept-Charset
und
Code:
Accept-Encoding
solltest du setzen.
 
Da musst du evtl. mit URLConnection und "setRequestProperty()" tricksen. Mich wundert nur, das Java standardmässig als MobileDevice eingestuft wird.
 
Im User-Agent steht halt "Java" drin, vielleicht geht man da von nem Android Gerät aus 😉
 
Hat geklappt danke euch

uc.setRequestProperty() ist die benötigte Methode


Java:
import java.io.IOException; 
import java.io.InputStream; 
import java.net.*;
import java.util.Scanner;
import java.io.File;
import java.io.FileWriter;
 
class Main { 
	
   public static void main( String[] args ) { 
	    
	  	InputStream is = null;
		File file = new File("/home/user/testfile");
		
		try {	
			URL url = new URL("http://www....");
			FileWriter writer = new FileWriter(file, false);
			
			URLConnection uc = url.openConnection(); 
			uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
			is = uc.getInputStream();
            writer.write( new Scanner(is).useDelimiter("//html//").next() ); 
            writer.flush();
		    
		} catch (Exception ex) {
			
			System.out.println("Fehler: " + ex.getMessage());
			
		} finally { 
			
		      if ( is != null ) 
		    	  
		        try { is.close(); } catch ( IOException e ) { } 
	    }     
	} 
}
 

Zurück
Oben