Προς το περιεχόμενο

http get request -> java


letsMakeHell

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθώ να υλοποιήσω έναν 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);

 

 

Οποιαδήποτε βοήθεια ή παρατήρηση, δεκτή!

Δημοσ.

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

 

δεν βγάζει λάθος.

αν μπορείς να δώσεις περισσότερες πληροφορίες και να εξηγήσεις καλύτερα τι θες ίσως σε βοηθήσω.

Δημοσ.

Γεια σου 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();

}

}

Δημοσ.

έτσι έχεις δοκιμάσει?

 

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



Δημοσ.

έτσι έχεις δοκιμάσει?

 

>
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!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...