Сокеты Java: HTTP / 1.1 505 версия HTTP не поддерживается - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю простой HTTP-клиент.Я следовал примеру кода с здесь , который работает для многих сайтов, кроме www.httbin.org .Когда я пытаюсь www.httbin.org , я получаю следующую ошибку:

HTTP/1.1 505 HTTP Version Not Supported
Connection: close
Server: Cowboy
Date: Fri, 28 Sep 2018 16:28:50 GMT
Content-Length: 0

Я смотрел другие ответы SO, но это не помогло.

Здесьмой код для проверки этого:

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Main {

    public static void main(String[] args) throws IOException {
        //Connection details
        InetAddress address =  InetAddress.getByName("www.httpbin.org");
        Socket mySocket = new Socket(address, 80);

        //Streams
        PrintWriter mySocketOutput = new PrintWriter(mySocket.getOutputStream(), true);

        InputStreamReader inputStreamReader = new InputStreamReader(mySocket.getInputStream());

        //Headers
        mySocketOutput.println("GET / HTTP/1.0");
        mySocketOutput.println("Host: www.httpbin.org");
        mySocketOutput.println("Connection: close");
        mySocketOutput.println();

        boolean loop = true;
        StringBuilder stringBuilder = new StringBuilder();

        //reading results from server
        while (loop) {
            if(inputStreamReader.ready()) {
                int currentChar = 0;
                while (currentChar != -1) {
                    currentChar =  inputStreamReader.read();
                    stringBuilder.append((char) currentChar);
                }
                loop = false;
            }
        }

        //print result
        System.out.println(stringBuilder.toString());
        mySocket.close();
    }
}

1 Ответ

0 голосов
/ 28 сентября 2018

Хотя ваш запрос похож на HTTP, это не так.Строка, заканчивающаяся HTTP в соответствии со стандартом, - \r\n, а не простая \n, как в случае printlnЕсли использовать правильную строку, заканчивающуюся во всех местах (то есть для каждой строки с содержимым, но также и для «пустой» строки, которая заканчивает заголовок запроса), она будет работать также с www.httpbin.org.

HTTP /1.1 Версия HTTP 505 не поддерживается

Почему этот запутанный ответ с сервера?Поскольку в вашем запросе нет правильного разделителя между заголовком HTTP и (пустым) телом HTTP, предполагается, что это запрос HTTP 0.9.Для давно устаревшего протокола HTTP 0.9 не требовалась пустая строка, состоящая только из \r\n в качестве заголовка конца запроса, поскольку в HTTP 0.9 не было таких вещей, как заголовок и тело.

Я создаю простой HTTP-клиент.

Пожалуйста, не стоит недооценивать сложность написания правильного HTTP-клиента.Например, код, который вы указали в качестве основы для своего собственного клиента, не только использовал неверный конец строки для запроса, но и утверждал, что поддерживает HTTP / 1.1, не имея возможности обрабатывать кодирование тела с частичной передачей.

И, возможно, вам следует пропустить другой код на этом сайте, если вы действительно хотите изучить протоколы.По крайней мере, Тонкий SMTP-клиент также использует сломанную реализацию протокола.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...