2012-02-17 54 views
1

我用java編寫簡單的telnet應用程序,此應用程序發送請求(xml)和讀取響應。但是,當我發送超過1200字節的請求(從Java),然後我得到HTTP 500.如果我從命令行發送此命令,我得到HTTP 200(好)。在java中有最大大小限制嗎?我無法發送超過1200字節的請求從Java與Telnet {關閉}

我的代碼:

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 2012-02-17 05:56:58

+0

@home我添加了我的代碼 – totali 2012-02-17 06:06:01

+0

當你得到一個HTTP 500時,檢查你的*服務器*日誌,看看那裏發生了什麼。 – Manish 2012-02-17 06:18:00

回答

1

這看起來像一個編碼問題。我不知道你從命令行得到的是什麼編碼。如果您使用Windows,那麼很可能是cp-1252。因此,您的1200個字符可能會達到1200個字節,這符合您指定的2000個Content-Length。

但是在Java中,每個字符都表示爲兩個字節。所以你的1200個字符變成了2400字節;但標題中的Content-Length:2000會使您的內容過早被切斷。

+0

我測試它寫2400(然後3000,....),但再次http 500.在命令行我寫「內容類型:文本/ XML;字符集= UTF-8" 。我認爲這不是內容長度問題。 – totali 2012-02-17 10:08:03

+0

那麼你是說即使Content-Length 3000的限制仍然是1200個字符(或其附近)?所以限制與Content-Length的設置無關?你確定?您輸入的第1200個字符可能是StAX解析器不理解的東西嗎?服務器是否提供了比您引用的一行更多的信息? – 2012-02-17 10:20:50

+0

如果內容長度無效,那麼爲什麼我可以從命令行發送此命令?服務器不提供任何信息,服務器響應無法創建StAX讀取器或寫入器。 – totali 2012-02-17 10:37:01