Java эквивалент HttpsURLConnection setRequestProperty в PrintWriter

Это всего лишь упражнение. Мне интересно, есть ли эквивалент этого кода:

String https_url = "https://api.ciscospark.com/v1/rooms";
URL url = new URL(https_url);
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();

connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
connection.setRequestProperty("Authorization", "I3MDUtMmEy");
connection.setDoOutput(true);

Я подумал, что можно сделать что-то вроде:

String https_url = "https://api.ciscospark.com/v1/rooms";
        URL url = new URL(https_url);
        HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
        connection.setDoOutput(true);
        PrintWriter pw = new PrintWriter(connection.getOutputStream());
        pw.println("GET /v1/rooms HTTP/1.1");
        pw.println("Host: https://api.ciscospark.com");
        pw.println("Content-Type: application/json; charset=utf-8");
        pw.println("Authorization: I3MDUtMmEy");
        pw.println("");

но я получаю сообщение об ошибке аутентификации от сервера, который вернул код ответа HTTP: 401 для URL: https://api.ciscospark.com/v1/rooms 401 Учетные данные для аутентификации отсутствуют или неверны. Могу ли я использовать печатный компьютер, чтобы он работал? А если нет, то почему? Благодарность

Если вы пишете HTTP-запрос вручную, вы не можете использовать HttpsURLConnection (ваш код записывает запрос в тело HTTP, где сервер не анализирует его). Вместо этого используйте чистый TCP Socket.

Robert 03.11.2018 16:15

если я использую необработанный TCP Socket, должен ли я вручную реализовывать рукопожатие? (Думаю)

sefiroths 03.11.2018 21:31

Какое рукопожатие? Если вы используете Socket / SSLSocket, вы получаете TCP-соединение, по которому вы получаете InputStream / OutputStream.

Robert 04.11.2018 12:34

Я пробовал использовать последний SocketFactory socketFactory = SSLSocketFactory.getDefault (); String ipAddr = InetAddress.getByName ("api.ciscospark.com/v1/rooms").toStrin‌ g (); но дает мне java.net.UnknownHostException: api.ciscospark.com/v1/rooms: неизвестная ошибка ... и я не могу получить ip даже с помощью nskookup ... если я сделаю Socket socket = socketFactory.createSocket ("api.ciscospark.com/v1/rooms", 443)) сообщает неизвестный хост

sefiroths 04.11.2018 15:00

Используйте только имя хоста, а не полный URL-адрес (только часть перед /).

Robert 04.11.2018 15:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
99
1

Ответы 1

Я пробовал:

    private static void useSslSocket() throws IOException {
        final SocketFactory socketFactory = SSLSocketFactory.getDefault();
        String ipAddr = InetAddress.getByName("api.ciscospark.com").toString();
        System.out.println("IP: "+ipAddr);
        try (final Socket socket = socketFactory.createSocket("api.ciscospark.com", 80)) {
            final String request = "GET / HTTP/1.1\r\nConnection: close\r\nHost:stackoverflow.com\r\n\r\n";

            PrintWriter pw = new PrintWriter(socket.getOutputStream());



            pw.println("GET /v1/rooms HTTP/1.1");
            pw.println("Host: https://api.ciscospark.com");
            pw.println("Content-Type: application/json; charset=utf-8");
            pw.println("Authorization: I3MDUtMmEy");
            pw.println("");
//          pw.flush();
//          pw.close();

            final InputStream inputStream = socket.getInputStream();
            final String response = readAsString(inputStream);
            System.out.println(response);
        }
    }

ответ javax.net.ssl.SSLException: нераспознанное сообщение SSL, соединение с открытым текстом?

Другие вопросы по теме