我能';t使用Java{Closed}从Telnet发送超过1200字节的请求
我用java编写了一个简单的telnet应用程序,这个应用程序发送请求(xml)和读取响应。但当我发送的请求(来自java)超过1200字节时,我就得到了HTTP 500。如果我从命令行发送这个命令,我会得到HTTP200(Ok)。java中是否有最大大小限制 我的代码:我能';t使用Java{Closed}从Telnet发送超过1200字节的请求,java,telnet,Java,Telnet,我用java编写了一个简单的telnet应用程序,这个应用程序发送请求(xml)和读取响应。但当我发送的请求(来自java)超过1200字节时,我就得到了HTTP 500。如果我从命令行发送这个命令,我会得到HTTP200(Ok)。java中是否有最大大小限制 我的代码: public static void main(String[] args) throws IOException { Socket pingSocket = null; PrintWr
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();
}
感谢您的帮助这看起来像是编码问题。我不知道你从命令行得到了什么编码。如果使用windows,很可能是cp-1252。因此,您的1200个字符可能计算为1200字节,这符合您指定的2000个内容长度
但在Java中,每个字符都表示为两个字节。所以你的1200个字符变成了2400个字节;但是标题中的内容长度:2000使您的内容过早地被切断。这看起来像是编码问题。我不知道你从命令行得到了什么编码。如果使用windows,很可能是cp-1252。因此,您的1200个字符可能计算为1200字节,这符合您指定的2000个内容长度
但在Java中,每个字符都表示为两个字节。所以你的1200个字符变成了2400个字节;但是标题中的内容长度:2000使您的内容过早地被切断。当您收到HTTP 500时,请检查您的服务器日志,看看那里发生了什么。@Manish我收到了这个错误:无法创建StAX reader或writerHTTP 500错误。我将其值更改为(request2.length()+400),当您获得HTTP 500时,请检查您的服务器日志以了解那里发生了什么。@Manish我收到此错误:无法创建StAX reader或writerHTTP 500错误。我把它的值改为(request2.length()+400),我测试它写2400(然后写3000,…),但还是写http 500。在命令行中,我写“内容类型:text/xml;charset=utf-8”。我认为这不是内容长度的问题。那么,你是说即使内容长度为3000,限制似乎仍然是1200个字符(或大约1200个字符)?那么限制与内容长度的设置无关?你确定吗?输入的第1200个字符可能是StAX解析器不理解的吗?服务器提供的信息是否比您引用的一行多?如果内容长度无效,那么为什么我可以从命令行发送此命令?服务器不提供任何信息,服务器响应无法创建StAX读写器。正如我所解释的,内容长度计算字节,在Java中,当您写出
时。println
,您为每个字符输出两个字节;但是,您在命令行中使用的telnet应用程序很可能只为每个字符发送一个字节。不,您是不对的。这是网络问题。(Cisco,MTU大小)我测试它写2400(然后写3000,…),但还是写http 500。在命令行中,我写“内容类型:text/xml;charset=utf-8”。我认为这不是内容长度的问题。那么,你是说即使内容长度为3000,限制似乎仍然是1200个字符(或大约1200个字符)?那么限制与内容长度的设置无关?你确定吗?输入的第1200个字符可能是StAX解析器不理解的吗?服务器提供的信息是否比您引用的一行多?如果内容长度无效,那么为什么我可以从命令行发送此命令?服务器不提供任何信息,服务器响应无法创建StAX读写器。正如我所解释的,内容长度计算字节,在Java中,当您写出时。println
,您为每个字符输出两个字节;但是,您在命令行中使用的telnet应用程序很可能只为每个字符发送一个字节。不,您是不对的。这是网络问题。(思科,MTU大小)