# redirected html auslesen



## Svenman_1 (25. Nov 2009)

Hallo!

Ich habe eine Frage:
Ich möchte gerne Informationen zu Filmen im Internet suchen können (von Wikipedia).
Dazu benutze ich die Auf gut Glück Suche von Ebay.
Ich bekomme aber den 403 Fehler statt der html seite!
Im Browser klappt die Umleitung, was muss ich ändern, damit das wie unten funktioniert?


```
String html="";
Sting t = "Van Helsing" //Beispiel
String lefturl = "http://www.google.de/search?hl=de&q=wikipedia+film+";
String righturl = "&btnI=Auf+gut+Gl%C3%BCck!&meta=";
java.net.URL anfrage = new java.net.URL(this.lefturl + t + this.righturl);
is = anfrage.openStream(); //Hier wird die Exception geworfen!

java.io.DataInputStream dis = new java.io.DataInputStream(new java.io.BufferedInputStream(is));

while((s = dis.readLine())!= null)
   html+=s;

html+="\n\n";
```


Danke im Vorraus!


----------



## tuxedo (25. Nov 2009)

Svenman_1 hat gesagt.:


> Dazu benutze ich die Auf gut Glück Suche von *Ebay*.



????


----------



## Toni55 (25. Nov 2009)

Nutze eine HttpClient wie z.B. xLightweb (xLightweb) oder Apache commons (HttpClient - HttpClient Home). Solche Clients führen intern einen redirect durch, falls konfiguriert. 

Beispiel:

```
HttpClient httpClient = new HttpClient(); 
httpClient.setFollowsRedirect(true);
	
IHttpResponse response = httpClient.call(new GetRequest(myUrl));
```


----------



## Svenman_1 (25. Nov 2009)

Hey!

Ja ich war wohl gerade in gedanken 

Ich meinte natürlich GOOGLE!

Das shau ich mir mal an! Danke!

Gruß


----------



## Mani (26. Nov 2009)

Hallo liebes Forum,

hab versucht den HTTPClient xLightWeb für einen Redirect zu nutzen:


```
import org.xlightweb.*;
import org.xlightweb.client.*;
import org.xlightweb.server.*;

public class test {

public static void main ( String [] args)
{

 HttpClient httpClient = new HttpClient // 1, wobei hier Zeile 16 im Code
 httpClient.setFollowsRedirect(true);
 IHttpResponse response = httpClient.call(new GetRequest("http://mydomain.org/index.php?action=getStatusMessage&uid=2");

}

}
```

Zweck: Mit dem Aufruf der Action getStatusMessage wird über den Redirect ein Wert zurückgeliefert, den ich dann gerne auslesen würde, in diesem Fall

http://mydomain.org/index.php?action=getStatusMessage&uid=2
=> 
http://mydomain.org/index.php?action=showStatusMessage&value=Ort

Wobei ich dann einen Wert aus einer mySQL DB mit dem Wert value = Ort zurückbekomme , den ich dann gerne auslesen würde.

Allerdings scheitert das Ganze schon in der Zeile // 1

Ich habe in Eclipse das xLightWeb-Package als external Jar in den Build-Path miteingebunden.

Ausgabe von Eclipse beim Run:

Exception in thread "main" java.lang.NoClassDefFoundError: org/xsocket/connection/IConnectionPool
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(Unknown Source)
 at java.lang.security.SecureClassLoader.defineClass(Unknown Source)
 ...
 at mypackage.test.main(test.java: 16)
Caused by: java.lang.ClassNotFoundException: org.xsocket.connection.IConnectionPool
 at java.net.URLClassLoader$1.run(Unknown Source)
 ...
 ... 13 more


Hab ich vergessen irgendwelche Bibliotheken einzubinden?

Vielen Dank im Voraus


----------



## Toni55 (27. Nov 2009)

xSocket fehlt. Verwendet am besten das jar, welches die abhängige lib xSocket beinhaltet https://sourceforge.net/projects/xlightweb/files/xlightweb-2.9.1-jar-with-dependencies.jar/download


----------



## Mani (27. Nov 2009)

Super, danke für die schnelle Hilfe

Jetzt stehe ich vor dem Problem des Auslesens der Variablen aus dem Redirect:

http://mydomain.org/index.php?action...sMessage&uid=2
nach 
http://mydomain.org/index.php?action...sage&value=Ort

Im Browser funktioniert der Redirect. Wenn ich aber nun über folgenden Code versuche die Variable value auszulesen, gibt er mir null zurück.


```
import org.xlightweb.*;
import org.xlightweb.client.*;
import org.xlightweb.server.*;
 
public class test {
 
public static void main ( String [] args)
{
 
 HttpClient httpClient = new HttpClient 
 httpClient.setFollowsRedirect(true);
 IHttpResponse response = httpClient.call(new GetRequest("http://mydomain.org/index.php?action=getStatusMessage&uid=2");
 String value = (String) response.getAttribute("value");

}
 
}
```

Ich habe auch schon über 


```
Set <String> s = response.getAttributeNameSet();
Iterator it = s.iterator();
while (it.hasNext())
{
 System.out.println(it.next());
}
```

versucht mir die Variablen auszugeben, allerdings ist die Menge leer.

Habe ich eine falsche Methode zum zerstückeln benutzt?


----------



## Toni55 (27. Nov 2009)

Was kommt den als Antwort zurück? -> mimeType. Gibt doch den response einfach mal über aus 
	
	
	
	





```
System.out.println(response.toString())
```

Du kannst auch die Header der Response mittels 
	
	
	
	





```
response.getHeader(..)
```
 zugreifen, auf den Body mittels 
	
	
	
	





```
getBlockingBody().readXXX()
```

Falls du als Antwort MimeType 'application/x-www-form-urlencoded' bekommst kannst du den response konvertieren

```
...
FormURLEncodedBody body = new FormURLEncodedBody(response.getBlockingBody());
String param = body.getParameter(...);
```


----------



## Mani (27. Nov 2009)

Ich würde eigentlich nur gerne die -neue- URL auslesen.

Also entweder als String und dann parsen, oder wenn das möglich, die mitgelieferten Variablen direkt rauslesen.

Quasi 


```
HttpRequest a = new GetRequest("http://mydomain.org/index.php?action...sMessage&uid=2");
 System.out.println(a.toString);
```

nur mit der redirected URL.

Leider gibt das das IHttpResponse irgendwie nicht her.


----------



## Toni55 (28. Nov 2009)

Um die redirect URL auszulesen muss du redirect deaktivieren. Die Redirect URL steht dann im Location header des response

```
String redirectURL = response.getHeader("location");
```


----------



## Mani (29. Nov 2009)

:toll:

Klasse! Nochmals vielen Dank


----------

