# HttpURLConnection-Wikipedia



## wikipedianer (25. Jul 2006)

Hallo,

ich weiß nicht ob ich hier mit meiner Frage ganz richtig bin. Habe ein kurzes "Programm" geschrieben das den HTML-Quelltext der Webseiten auslesen soll. Wenn ich als startseite="http://www.amazon.de" eingebe wird der HTML Quelltext ausgegeben.Habe es mit anderen Webseiten versucht, da klappt des auch. 
Mein Problem ist wenn ich Seiten von Wikipedia auslesen möchte, wird meine Anfrage immer vom Server mit dem Response-Code 403 zurückgewiesen. Habe dieselben Wikipedia-Adressen eingegeben die von meinem Firefoxbrowser 
korrekt angezeigt wurden, diese an die Variable startseite übergeben und ich bekam jedesmal den Responsecode 403, also verboten.
Also meine Vermutung ist, dass Wikipedia nur einen Aufruf von einem Browser zulässt. In dem Fall müßte man Wikipedia vorgaukeln, mein Programm sei ein Browser. Aber das ist sicher nicht so leicht zu realisieren.
Habe auch versucht mit Sockets Seiten von Wikipedia auszulesen, aber auch des ist gescheitert.
Vielleicht hat jemand im Forum Erfahrung im Auslesen von Wikipediaseiten und hat einen Hinweis.
Ich hoffe ich bin hier richtig mit meiner Frage.

Gruß


```
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class ArtikelUrlsErmittler {

	/**
	 * @param args
	 */
	
	final static String startseite="http://de.wikipedia.org/wiki/Hilfe:MediaWiki";
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		URL url;
		try {
			url = new URL(startseite);
		
		HttpURLConnection huc=(HttpURLConnection) url.openConnection();
		huc.setConnectTimeout(30000);
		
		if (huc.getResponseCode() == HttpURLConnection.HTTP_OK) 
		{
			InputStream is=url.openStream();
			Scanner in=new Scanner(is);
			
			while(in.hasNextLine())
			{
				String line=in.nextLine();
				System.out.println(line);
			}
			
		}
		else
		{
			//Nicht okay...

			System.out.println(huc.getResponseCode());
			
		}
	} catch (MalformedURLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}catch(IOException e)
	{
		e.toString();
	}catch(Exception e)
	{
		e.toString();
		e.printStackTrace();
	}
	
}

}
```


----------



## foobar (25. Jul 2006)

Setz doch mal mit einem Browser einen Request an Wikipedia ab und   zeichne den Datenaustausch mit einem Sniffer auf, dann siehst du was abgeht.

http://www.ethereal.com/


----------



## AlArenal (25. Jul 2006)

Ethereal? Ist das nicht mit Kanonen auf Spatzen geschossen? Ein einfacher klitzekleiner HTTP Proxy, wie PlugProxy (in Java geschrieben) tuts doch auch. Sowas ist im JBuilder schon mit drin und vermutlich auch in diversen Eclipse- und Netbeans-Plugins zur Web-Entwicklung...


----------



## Gast (25. Jul 2006)

Danke für die Hinweise.

@AlArenal
verstehe ich dass richtig dass dieser PlugProxy an Wikipedia einen Http-Request schickt?!
Den hier meinst du doch:
http://sourceforge.net/projects/plugproxy/
?

Gruß


Nochmals vielen Dank


----------



## AlArenal (25. Jul 2006)

PlugProxy ist, wie der Namen schon sagt, ein Proxy. Beispiel-Konfig für dich:

Host: de.wikipedia.de
Remote Port: 80
Local Port: 2000

Dann gehste auf "Start", schnappst dir nen Browser und gehst auf "http://localhost:2000/wiki/Hilfe:MediaWiki" und bekommst: Ne 404.. Na tolle Wurst.. :lol:

Es wird vermutlich damit zusammenhängen, dass es diverse Möglichkeiten gibt Mediawiki zu konfigurieren. Wem die URLs spanisch vorkommen, der liegt schonmal nicht ganz falsch. Die werden aufm Server nämlich nicht 1:1 umgesetzt, sondern entweder mittels diversen Rewrite-Regeln durch den Apache und/oder durch URI-Parsing in PHP geschleust, um rauszubekommen, was der User da gerade vorhat. Das Ganze dient u.a. dazu die URLs menschen-lesbar und suchmaschinenfreundlich zu gestalten, kann bei der Verwendung unseres kleinen Freundes PlugProxy aber zu Ärger führen, wie ich sehe. 

Interessant fänd ichs nun mal zu wissen, warum in meinem Request ne "phpbb3_sid" als Cookie drin ist... Ich kenne nur ein phpBB3 Beta Forum und das hab ich selbst aufgesetzt und da war ich heute noch gar nicht drauf.. *kopfkratz*

Vielleicht doch Ethereal?


----------



## Roar (25. Jul 2006)

dein code funktioniert bei mir.


----------



## AlArenal (25. Jul 2006)

Roar hat gesagt.:
			
		

> dein code funktioniert bei mir.



Vielleicht hat er ihn getestet, als Wikipedia mal gerade wieder dicht oder down war


----------



## Gast (25. Jul 2006)

@Roar mit welcher Wikipedia-Url funktioniert mein Code?
Also wie gesagt mit normalen Urls funktioniert er, mit den von Wikipedia nicht.
@AlArenal Also bevor ich was poste, teste ich selbst und Wikipedia war nicht off. Hat es etwa bei dir funktioniert, oder was sonst hat der Smiley zu bedeuten? 

Gruß


----------



## AlArenal (25. Jul 2006)

Das war ohne großen Hintergedanken - abgesehen davon dass WP ja leider öfter mal Hänger hat oder mal gerade gesperrt wird, wenn einstweilige Verfügungen ergehen...


----------



## Gast (25. Jul 2006)

Wie gesagt ich bin sehr froh über eure Tipps.
Wikipedia ist oft off das stimmt. 
Das Problem ist ich habe sehr oft Internetseiten mit Java ausgelesen mit dem Programm und bei Wikipedia klappt des nicht. 
Mit dem Ethereal komme ich vielleicht weiter, danke sehr für deinen Hinweis.


Gruß


----------



## AlArenal (25. Jul 2006)

Da Wikipedia wei gesagt einige Hackentricks benutzt, um die URL zu parsen, mag es sein, dass die notwendigen Änderungen bei der Verwendung z.B. von PlugProxy zu Fehlern führen, so dass man das Protokoll nicht wirklich verwenden kann. Wenn du mal den normalen Traffic zwischen Browseru und Server "zu fassen" bekommst, biste vielleicht schlauer. Mglw. wird da mit HTTP-Redirects und ähnlichem Krims gearbeitet.


----------



## Gast (25. Jul 2006)

Hi,

also ich habe das Problem zwar nicht gelöst, aber für die Nachkommen kann ich sagen, dass man Wikipedia auf alle Fälle mit dem HtmlParser auslesen kann.

http://htmlparser.sourceforge.net/


Gruß


----------



## millinär (25. Jul 2006)

wpe-pro ist fürs sniffen eigentlich ganz gut


----------



## Gast (1. Aug 2006)

hallo,

ich hab' ebenfalls ein prog geschrieben, um wp-artikel auszulesen und bin auf den gleichen fehler gestoßen. lustig ist allerdings, daß wenn ich mein programm mit java-1.4.2 compiliere, alles funktioniert; mit java 5.0 kommt dann das erwähnte 403.

würde mich mal interessieren, ob das bei deinem programm ebenfalls so ist.

gruß,
marcel


----------



## dodo (2. Aug 2006)

Hallo,

versuchs mal mit htmlunit, damit kann man einen Browser simulieren
um Webanwendungen zu testen. Man kann auf den Content zugreifen,
und z.B. auch Formulare ausfüllen und abschicken uvm.

http://htmlunit.sourceforge.net/

Gruß,
dodo


----------



## moormaster (3. Aug 2006)

Reicht es nicht, in Java einfach per setRequestProperty User-Agent auf den richtigen Wert zu setzen?

http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLConnection.html#setRequestProperty(java.lang.String,%20java.lang.String)

so dass dann statt


```
GET /fw_rules.htm HTTP/1.1
User-Agent: Java/1.4.2_11
Host: 192.168.2.1
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
```

einfach 


```
GET /fw_rules.htm HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.3) Gecko/20040910
Host: 192.168.2.1
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
```

gesendet wird. Evtl. setzt man noch den passenden Referer und dann müsste doch der request am Server so ankommen, wie er sein muss?


----------

