Java создает сообщение HTTP-запроса - PullRequest
1 голос
/ 30 сентября 2011

Я задал похожий вопрос в другой ветке, но мне кажется, что у меня просто проблемы с получением правильного синтаксиса на данный момент. Я в основном хочу открыть сокет в Java, отправить сообщение HTTP-запроса, чтобы получить поля заголовка определенной веб-страницы. Моя программа выглядит так:

            String server = "www.w3.org"; 
            int port = 80; 
            String uri = "/Protocols/rfc2616/rfc2616-sec5.html#sec5.1"

            Socket socket = new Socket(server, port); 

            PrintStream output = new PrintStream(socket.getOutputStream()); 
            BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            output.println("HEAD " + uri + " HTTP/1.1");

            //String response = ""; 
            String line = ""; 
            while((line = socketInput.readLine()) != null){
                System.out.println(line);  
            }

            socketInput.close();
            socket.close();

Это на самом деле не работает. Или это не работает для всех сайтов. Если бы кто-то мог просто сказать мне о непосредственных проблемах с тем, что я делаю, это было бы здорово. Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Изменить

output.println("HEAD " + uri + " HTTP/1.1");

на

output.println("HEAD " + uri + " HTTP/1.1");
output.println("Host: " + server);
output.println();

Необходимо отправить заголовок Host, поскольку обычно на одном IP-адресе больше одного виртуального хоста.Если вы используете HTTP/1.0, он работает без заголовка Host.

1 голос
/ 30 сентября 2011

Я бы использовал какой-нибудь компонент более высокого уровня, например HttpURLConnection ( см. Здесь ) или apache http component .

...