letsMakeHell Δημοσ. 18 Δεκεμβρίου 2010 Δημοσ. 18 Δεκεμβρίου 2010 Προσπαθώ να υλοποιήσω έναν mini-commandline browser σε java και τάχω βρει σκούρα στο γελοίο κομμάτι του http get request Note: Δη θέλω να χρησιμοποιήσω τις έτοιμες HttpConnect βιβλιοθήκες τις java αλλά απλά tcp sockets και έχω μείνει στάσιμος σε ένα %^#^# κομμάτι του κώδικα με τις ώρες χωρίς να βρίσκω λύση xD Τα καίρια σημεία του κώδικα: Socket clientSocket = new Socket(host, 80); System.out.println("Connected in " + clientSocket.getRemoteSocketAddress()); String GetReq = "GET " + path + " HTTP/1.1 \nConnection: keep alive\nUser-Agent: " + UserAgent + "\nAccept: text/html\n"; DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); outToServer.writeBytes(GetReq); Οποιαδήποτε βοήθεια ή παρατήρηση, δεκτή!
virxen75 Δημοσ. 18 Δεκεμβρίου 2010 Δημοσ. 18 Δεκεμβρίου 2010 > import java.net.Socket; import java.io.IOException; import java.io.DataInputStream; import java.io.DataOutputStream; public class HttpSocketTest{ public HttpSocketTest(){ String path="http://www.google.gr"; Socket clientSocket=null; try{ String host="www.google.gr"; clientSocket= new Socket(host, 80); }catch (IOException e) { System.out.println(e); } System.out.println("Connected in " + clientSocket.getRemoteSocketAddress()); String GetReq = "GET " + path + " HTTP/1.1 \nConnection: keep alive\nAccept: text/html\n"; DataOutputStream outToServer=null; try{ outToServer = new DataOutputStream(clientSocket.getOutputStream()); outToServer.writeBytes(GetReq); }catch (IOException e) { System.out.println(e); } } public static void main (String args[]){ new HttpSocketTest(); } } δεν βγάζει λάθος. αν μπορείς να δώσεις περισσότερες πληροφορίες και να εξηγήσεις καλύτερα τι θες ίσως σε βοηθήσω.
letsMakeHell Δημοσ. 18 Δεκεμβρίου 2010 Μέλος Δημοσ. 18 Δεκεμβρίου 2010 Γεια σου virxen, Το πρόβλημα μου είναι οτι ενώ συνδέεται κανονικά στη σελίδα με το αρχείο, δεν κάνει get το αρχείο απο το path. Τα responses που λαμβάνω ειναι είτε 400 - Bad request, είτε 501 method not implemented. Προσπάθησε να εκτυπώσεις τη σελίδα. import java.net.Socket;import java.io.IOException; import java.io.DataInputStream; import java.io.DataOutputStream; public class HttpSocketTest{ public HttpSocketTest(){ String path="http://www.google.gr"; Socket clientSocket=null; try{ String host="www.google.gr"; clientSocket= new Socket(host, 80); }catch (IOException e) { System.out.println(e); } System.out.println("Connected in " + clientSocket.getRemoteSocketAddress()); String GetReq = "GET " + path + " HTTP/1.1 \nConnection: keep alive\nAccept: text/html\n"; DataOutputStream outToServer=null; String serverSentence = "\0";BufferedReader inFromServer = null; try{ outToServer = new DataOutputStream(clientSocket.getOutputStream()); inFromServer =new BufferedReader(new InputStreamReader(sock.getInputStream())); outToServer.writeBytes(GetReq); while((serverSentence = inFromServer.readLine()) != null) { // Read each line seperately System.out.println(serverSentence); } }catch (IOException e) { System.out.println(e); } } public static void main (String args[]){ new HttpSocketTest(); } }
virxen75 Δημοσ. 18 Δεκεμβρίου 2010 Δημοσ. 18 Δεκεμβρίου 2010 έτσι έχεις δοκιμάσει? > import java.net.Socket; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.MalformedURLException; public class HttpSocketTest{ public HttpSocketTest(){ String file = "/",serverSentence=""; try { URL u = new URL("http://www.java-forums.org"); Socket s = new Socket(u.getHost(), 80); OutputStream outToServer = s.getOutputStream(); OutputStreamWriter out = new OutputStreamWriter(outToServer); out.write("GET " + file + " HTTP/1.0\r\n"); out.write("Accept: text/plain, text/html, text/*\r\n"); out.write("Connection: keep alive\r\n"); out.write("\r\n"); out.flush(); outToServer.flush(); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream())); while((serverSentence = inFromServer.readLine()) != null) { // Read each line seperately System.out.println(serverSentence); } }catch (MalformedURLException ex) { System.err.println("error="+ex); } catch (IOException ex) { System.err.println(ex); } } public static void main (String args[]){ new HttpSocketTest(); } }
letsMakeHell Δημοσ. 19 Δεκεμβρίου 2010 Μέλος Δημοσ. 19 Δεκεμβρίου 2010 έτσι έχεις δοκιμάσει? > import java.net.Socket; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.MalformedURLException; public class HttpSocketTest{ public HttpSocketTest(){ String file = "/",serverSentence=""; try { URL u = new URL("http://www.java-forums.org"); Socket s = new Socket(u.getHost(), 80); OutputStream outToServer = s.getOutputStream(); OutputStreamWriter out = new OutputStreamWriter(outToServer); out.write("GET " + file + " HTTP/1.0\r\n"); out.write("Accept: text/plain, text/html, text/*\r\n"); out.write("Connection: keep alive\r\n"); out.write("\r\n"); out.flush(); outToServer.flush(); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream())); while((serverSentence = inFromServer.readLine()) != null) { // Read each line seperately System.out.println(serverSentence); } }catch (MalformedURLException ex) { System.err.println("error="+ex); } catch (IOException ex) { System.err.println(ex); } } public static void main (String args[]){ new HttpSocketTest(); } } Thanks φίλε! Απ'ότι φαίνεται η OutputStreamWriter έκανε το θαύμα της Όλα δουλεύουν ΟΚ. Αν και δεν καταλαβαίνω τι διαφορετικό έχει αυτή η βιβλιοθήκη και στέλνει σωστά το request!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.