Sockety pobieranie kodu html

0

Witam. Chciałbym pobrać kod html ze strony za pomocą gniazda. Znalazłem kilka sposobów w internecie, ale niestety żaden nie chce mi działać. Dlatego chciałbym prosić o zweryfikowanie kodu poniżej i wskazanie co robię nie tak. Mam wrażenie, że program głupieje przy pętli while

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;


public class Klasa{


public static void main (String[] args)throws IOException{
	

		 
	String AdresStrony= "www.debian.org";

	Socket ourURL = new Socket(AdresStrony, 80);
	System.out.println("Port : "+ourURL.getPort());
	System.out.println("LPort : "+ourURL.getLocalPort());
	System.out.println("Host : "+ourURL.getInetAddress());
	System.out.println("LHost : "+ourURL.getLocalAddress());
	
	
	 InputStream is = ourURL.getInputStream();
	 BufferedReader br = new BufferedReader(new InputStreamReader( System.in));
	 InputStreamReader isr = new InputStreamReader(is);
	 String theLine;
	 StringBuffer sb = new StringBuffer();	
	 while ((theLine = br.readLine()) != null) {
		 
		 sb.append(theLine + "\r\n");
		 }
	 isr.close();                                                           
     br.close();                                                          
     ourURL.close(); 
	 System.out.println(sb);
	

	
}
}
0

http://jsoup.org/ spróbuj tym.

1

Po pierwsze, próbujesz czytać z klawiatury, a nie z serwera.

BufferedReader br = new BufferedReader(new InputStreamReader( System.in));

Po drugie, musisz wpierw wysłać żądanie.

    InputStream is = ourURL.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(ourURL.getInputStream()));
    InputStreamReader isr = new InputStreamReader(is);
    String zapytanie="GET http://"+AdresStrony+"/ HTTP/1.1\""
        +"\r\n"+"Host: www.dom.pl"
        +"\r\n"+"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
        +"\r\n"+"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
        +"\r\n"+"Accept-Language: pl,en-us;q=0.7,en;q=0.3"
        +"\r\n"+"Accept-Encoding: gzip,deflate"
        +"\r\n"+"Acept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7"
        +"\r\n"+"Keep-Alive: 300"
        +"\r\n"+"Proxy-Connection: keep-alive"
        +"\r\n\r\n";     
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(ourURL.getOutputStream()));
    out.write(zapytanie);
    out.flush();
    String theLine;
    ...
0

Ok, działa :) Byłbym wdzięczny, jakbyś jeszcze wyjaśnił mi dlaczego to zapytanie jest tak skonstruowane.

0

Nie wiem, podejrzałem kiedyś co wysyła przeglądarka i skopiowałem. Firefox wysłał przed chwilą do strony www.debian.org takie żądanie:

GET / HTTP/1.1
Host: www.debian.org
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
1

@patrican bo tak jest zaprojektowany protokół HTTP. Na takie zapytanie server odpowiada bo potrafi je obsłużyć.
https://pl.wikipedia.org/wiki/Hypertext_Transfer_Protocol

// Jak nie chcesz się "bawić" w tworzenie zapytań to możesz skorzystać z jsoup - radomiej wcześniej linkował.

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