Я не могу отправить запрос длиной более 1200 байт из Telnet с Java {Closed} - PullRequest
1 голос
/ 17 февраля 2012

Я пишу простое приложение telnet с Java, это приложение отправляет запрос (xml) и читает ответ.Но когда я отправляю запрос (из java) более 1200 байт, я получаю HTTP 500. Если я посылаю эту команду из командной строки, я получаю HTTP 200 (Ok).Есть ли максимальный размер в java?

Мой код:

    public static void main(String[] args) throws IOException {
        Socket pingSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            pingSocket = new Socket("host", 4380);
            out = new PrintWriter(pingSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream()));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        String newLine = "\n";
        String header = "POST /path HTTP/1.1" + newLine
                + "Host: host:4380" + newLine
                + "Authorization: Basic cuyasdyq123ha123" + newLine
                + "Connection: close" + newLine
                + "SOAPAction: \"\"" + newLine
                + "Content-Type: text/xml; charset=utf-8" + newLine
                + "Content-Length: 2000" + newLine;

        String request = "my xml data here";

        System.out.println(header + request);

        out.println(header);
        out.println(request);

        System.out.println(in.readLine());
        System.out.println();

        while (in.read() != -1) {
            System.out.print((char) in.read());
        }

        out.close();
        in.close();
        pingSocket.close();
    }

Спасибо за любую помощь

1 Ответ

1 голос
/ 17 февраля 2012

Это похоже на проблему с кодировкой.Я не знаю, какую кодировку вы получаете из командной строки.Вполне может быть CP-1252, если вы используете Windows.Таким образом, ваши 1200 символов, вероятно, обрабатываются до 1200 байтов, что вписывается в указанную вами длину содержимого 2000.

Но в Java каждый символ представлен в виде двух байтов.Таким образом, ваши 1200 символов превращаются в 2400 байтов;но Content-Length: 2000 в заголовке делает ваш контент преждевременным.

...