Java Socket

0

mam za zadanie pobrac tresc strony typu http://www.google.com/search?q=pies (chodzi mi o to ze musi byc na koncu zapytanie) za pomoca Socket. Niestety ponizszy kod dziala prawidlowo jedynie dla adresow bez "zapytan". Z tego co się dowiedziałem mozna uzyc metody getHost klasy URL aby wyciac z linku host. Jak jednak uzyskać tresc strony host+zapytanie

public class Nowa {
	public static void main(String[]args) throws UnknownHostException, IOException{
		
		
		//Socket s = new Socket("www.google.com/search?q=pies",80);
		Socket s = new Socket("www.google.com",80);
		InputStream is = s.getInputStream();
		OutputStream os = s.getOutputStream();
		StringBuilder sb = new StringBuilder();
		
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
		
		pw.println("GET / HTTP/1.1");
		pw.println("HOST: www.google.com");
		//pw.println("HOST: www.google.com/search?q=pies");
		pw.println();
		pw.flush();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
		String ln=null;
		while((ln = br.readLine()) !=null){
			sb.append(ln);
			sb.append("\n");
		}
		System.out.println(sb);
		
		s.close();	
	}	
}
 

Jak zapewne się domyślicie - w HTML'ach jestem zielony jak trawa , wiec licze na wyrozumiałość

0

Próbujesz pójść na łatwiznę ;)
W URLu http://www.google.com/search?q=pies hostem cały czas jest www.google.com, a to /search?q=pies to już żądany zasób (GET).

Edit: a co to niby ma do HTMLa?

0

to fajnie- ale prosze wskazowki co zmienic w kodzie

0

No a niby to co napisałem to nie jest wskazówka? :|
Naucz się analizować tekst pisany językiem naturalnym, przyda Ci się w życiu.
Anyway - skoro potrzebujesz czegoś bardziej doświadczalnego, to sobie otwórz tego gógla w przeglądarce i zobacz, jakie ona nagłówki wysyła. Organoleptycznie dojdziesz do tego, jak to Ty powinieneś w kodzie robić.

0

Trochę niżej jest taki wątek Sockety pobieranie kodu html. Może Ci pomoże.

0

Jak mniemam powinno to wyglądać tak:

 
public class Nowa {
	public static String printPage(String link) throws IOException {
		URL adres= new URL(link);
		
		Socket s = new Socket(adres.getHost(),80);
		InputStream is = s.getInputStream();
		OutputStream os = s.getOutputStream();
		StringBuilder sb = new StringBuilder();
		
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
		
		pw.println("GET "+adres.getFile()+" HTTP/1.1");
		pw.println("HOST: www.google.com");
		pw.println();
		pw.flush();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
		String ln=null;
		while((ln = br.readLine()) !=null){
			sb.append(ln);
			sb.append("\n");
		}
	
		s.close();
		return sb.toString();
	}
	public static void main(String[]args) throws UnknownHostException, IOException{
		System.out.println(printPage("http://www.google.pl/search?q=pies&gws_rd=cr&ei=34ZhVtDeIKexygOEzqaoAQ"));
	}	
}

Edit:gdyby ktoś mógł potwierdzić/zaprzeczyć to byłoby mniodnie

1

Nie możesz sprawdzić?

System.out.println(printPage("https://www.google.pl/search?q=pies&gws_rd=cr&ei=34ZhVtDeIKexygOEzqaoAQ"));
0

sprawdzam i niestety wg mnie nie zwraca dokladnie tresci strony takiej jaka jest po nacisnieciu "wyswietl żrodlo strony" ponieważ tekst zwrocony przez moja funkcje konczy sie </script></body></html> a na stronie konczy sie </style></body></html>

1 użytkowników online, w tym zalogowanych: 0, gości: 1