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