Socket Problem

kela_root

Mitglied
Hallo Leute, ich habe ein kleines Problem. Ich sende an einen Socket einen Post-Request und erhalte auch die Antwort. Nun möchte ich danach gleich wieder einen Get-Request absenden, doch leider funktioniert das nicht richtig. So jetzt mal zum Background, warum ich das brauche:

Ich hab eine kleine Web-Applikation mit Frontend und Backend. Ins Backend kommt man nur, wenn man sich einloggt. Das Frontend und Backend sollen jeweils von einem Browser und einer Applikation angesprochen werden. Nun kann ich alle Infos vom Frontend wunderbar in der Applikation anzeigen lassen, aber in den Backendbereich komm ich nicht rein, ich bekomme immer nur eine 302 Response und mehr passiert nicht. Könnt ihr mir bitte helfen?

Hier mein Code:

Code:
		try {
			// Construct data
			String data = postData;

			// Create a socket to the host
			String hostname = "localhost";
			int port = 80;
			InetAddress addr = InetAddress.getByName(hostname);
			Socket socket = new Socket(addr, port);

			// Send header
			String path = "/login/check/";
			BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
					socket.getOutputStream(), "UTF8"));
			wr.write("POST " + path + " HTTP/1.1"
					+ System.getProperty("line.separator"));
			wr.write("Host: http://localhost"
					+ System.getProperty("line.separator"));
			wr
					.write("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"
							+ System.getProperty("line.separator"));
			wr
					.write("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
							+ System.getProperty("line.separator"));
			wr.write("Accept-Language: en-us,en;q=0.5"
					+ System.getProperty("line.separator"));
			wr.write("Accept-Encoding: gzip,deflate"
					+ System.getProperty("line.separator"));
			wr.write("Accept-Charset: UTF-8,*"
					+ System.getProperty("line.separator"));
			wr.write("Keep-Alive: 300" + System.getProperty("line.separator"));
			wr.write("Connection: keep-alive"
					+ System.getProperty("line.separator"));
			wr.write("Cookie: sessionid=6c5a0ddc2d1b0feb57ac9a46d8f98ad2"
					+ System.getProperty("line.separator"));
			wr.write("Content-Type: application/x-www-form-urlencoded"
					+ System.getProperty("line.separator"));
			wr.write("Content-Length: " + data.length()
					+ System.getProperty("line.separator"));
			wr.write(System.getProperty("line.separator"));

			// Send data
			wr.write(data);
			wr.flush();

			wr.write("GET /overview/ HTTP/1.1");
			wr.write("Host: http://localhost"
					+ System.getProperty("line.separator"));
			wr
					.write("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"
							+ System.getProperty("line.separator"));
			wr
					.write("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
							+ System.getProperty("line.separator"));
			wr.write("Accept-Language: en-us,en;q=0.5"
					+ System.getProperty("line.separator"));
			wr.write("Accept-Encoding: gzip,deflate"
					+ System.getProperty("line.separator"));
			wr.write("Accept-Charset: UTF-8,*"
					+ System.getProperty("line.separator"));
			wr.write("Keep-Alive: 300" + System.getProperty("line.separator"));
			wr.write("Connection: keep-alive"
					+ System.getProperty("line.separator"));
			wr.write("Cookie: sessionid=6c5a0ddc2d1b0feb57ac9a46d8f98ad2"
					+ System.getProperty("line.separator"));
			wr.write(System.getProperty("line.separator"));

			// Send data
			wr.write(data);
			wr.flush();

			// Get response
			BufferedReader rd = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			String line;
			while ((line = rd.readLine()) != null) {
				System.out.println(line);
			}
			wr.close();
			rd.close();
		} catch (Exception e) {
		}

So sieht die Antwort aus, die ich bekomme:

HTTP/1.1 302 FOUND
Date: Wed, 28 Jan 2009 23:52:22 GMT
Server: Apache/2.2.9 (Fedora)
Vary: Cookie
Location: http://localhost/overwiew
Set-Cookie: sessionid=6c5a0ddc2d1b0feb57ac9a46d8f98ad2; Domain=.localhost; expires=Thu, 29-Jan-2009 23:52:22 GMT; Max-Age=86400; Path=/
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
 
Vielleicht mag er den Slash beim Request nicht:

GET /overview/ HTTP/1.1

Du bekommst als Antwort ja 302 mit folgender Location:

Location: http://localhost/overwiew

Schon einmal mit einer konkreten Seite (zB /overview/login.html) probiert?
 
Das hat mit dem letzten Slash nichts zu tun. Den hab ich beim einfügen nur vergessen. Also das Problem ist, dass mit der 302 Response weitergeleitet wird und ich komm einfach nicht an den Response Body ran. Hat jemand nen Tipp, wie ich an diesen rankommen? Vielleicht mit HttpUrklConnection oder HttpClient?
 
ja, dass weiß ich auch. Aber noch mal zu deinem besseren Verständnis:
302 bedeutet:
Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit (in HTTP/1.0 „Moved Temporarily“, RFC 1945). Die alte Adresse bleibt gültig. Wird in HTTP/1.1 je nach Anwendungsfall durch die Statuscodes 301 bzw. 307 ersetzt. 302-Weiterleitung ist aufgrund eines Suchmaschinen-Fehlers, dem URL-Hijacking, in Kritik geraten. Webmaster sollten generell von der Verwendung eines solchen Redirects absehen.

Ist ja klar, dass die keinen Body hat, aber die Response danach, nämlich mit dem 200 Code hat einen Responsebody und an den will ich rankommen ;-)
 
Dann mach einen Request auf die Adresse im Location Header wie in der Beschreibung erwähnt:

Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit (in HTTP/1.0 „Moved Temporarily“, RFC 1945).

Code:
Location: http://localhost/overwiew

Code:
GET http://localhost/overwiew HTTP/1.1
 
^^ ich trottel, natürlich, das ist die ganze ursache des problems, manchmal sieht man die wald vor lauter bäumen nicht, ich hab mir ja auch schon selber die lösung gegeben:p
 
Zurück