HttpURLConnection-Wikipedia

Status
Nicht offen für weitere Antworten.
W

wikipedianer

Gast
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ß

Code:
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();
	}
	
}

}
 

AlArenal

Top Contributor
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...
 

AlArenal

Top Contributor
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? ;)
 
G

Gast

Gast
@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

Top Contributor
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...
 
G

Gast

Gast
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

Top Contributor
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.
 
G

Gast

Gast
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
 

moormaster

Top Contributor
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

Code:
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

Code:
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?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
E HTTP HttpURLConnection & Javascript Netzwerkprogrammierung 2
A HTTP HttpURLConnection wiederverwenden? Netzwerkprogrammierung 2
T HttpURLConnection Netzwerkprogrammierung 6
T Ladezeit einer Seite mit HttpURLConnection und Bildern Netzwerkprogrammierung 2
J HttpURLConnection ResponseCode 403 Netzwerkprogrammierung 2
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
M HttpURLConnection und Proxy Netzwerkprogrammierung 2
D Hilfe, meine HttpURLConnection hängt manchmal. Netzwerkprogrammierung 9
F HttpURLConnection überschreiben Netzwerkprogrammierung 2
W Problem mit HttpURLConnection Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
G Redirects einer HttpURLConnection ermitteln Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben