2012-02-17 1 views
1

Я пишу простое приложение telnet с java, это запрос на отправку приложения (xml) и запрос на чтение. Но когда я отправляю запрос (из java) более 1200 байт, я получаю HTTP 500. Если я отправлю эту команду из командной строки, я получаю HTTP 200 (Ok). Есть ли максимальный размер в java?Я не могу отправить запрос более 1200 байт из Telnet с 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(); 
    } 

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

+0

Вы должны показать свой код. – home

+0

@home Я добавил свой код – totali

+0

Когда вы получаете HTTP 500, проверьте свои журналы * сервера *, чтобы узнать, что там происходит. – Manish

ответ

1

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

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

+0

Я тестирую его на запись 2400 (затем 3000, ....), но снова http 500. В командной строке я пишу «Content-Type: text/xml; charset = UTF-8" . Я думаю, что это не проблема длины содержимого. – totali

+0

Итак, вы говорите, что ограничение по-прежнему составляет 1200 символов (или около того) даже с Content-Length 3000? Таким образом, предел не зависит от настройки Content-Length? Ты уверен? Возможно ли, что 1200-й символ вашего ввода - это то, что парсер StAX не понимает? Предоставляет ли сервер вам больше информации, чем одна строка, которую вы указали? –

+0

Если длина содержимого недопустима, то почему я могу отправить эту команду из командной строки? Сервер не дает никакой информации, ответ сервера не может быть создан для чтения или записи StAX. – totali