Базовый Java-клиент возвращает 400 - PullRequest
0 голосов
/ 23 ноября 2018

Следующий код был скопирован для Horstmann's, Big Java Early Objects 6-е издание - Глава 23.3.Единственная модификация - пакет, добавленный eclipse.

Код:

package zipCodeScrapper;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class client {
    public static void main(String[] args) throws IOException {
        // Get command-line arguments
        String host;
        String resource;

        if (args.length == 2) {
            host = args[0];
            resource = args[1];
        } else {
            System.out.println("Getting / from horstmann.com");
            host = "horstmann.com";
            resource = "/";
        }

        // Open socket
        final int HTTP_PORT = 80;
        try (Socket s = new Socket(host, HTTP_PORT)) {

            // Get streams
            InputStream instream = s.getInputStream();
            OutputStream outstream = s.getOutputStream();

            // Turn streams into scanners and writers
            Scanner in = new Scanner(instream);
            PrintWriter out = new PrintWriter(outstream);

            // Send command
            String command = "GET " + resource + " HTTP/1.1\n" + "Host: " + host + "\n\n";
            out.print(command);
            out.flush();

            while (in.hasNextLine()) {
                String input = in.nextLine();
                System.out.println(input);
            }
        }
    }
}

Код получает 400 Bad Request.Я попытался заменить хост и ресурсы другими значениями, однако я продолжаю получать ошибку 400.

1 Ответ

0 голосов
/ 23 ноября 2018

Во-первых, прочитайте эту документацию. RFC p1 и RFC2 p2

Строковый разделитель HTTP не является \n.Это должно быть \r\n.Для получения дополнительной информации читайте эту ветку;

Что такое разрыв строки в HTTP?

...