我正在尝试制作一个可以接受GET和POST HTTP请求的java服务器。现在我设法让GET方法起作用。但我没有设法让POST方法工作。我的服务器设法读取请求头,但似乎没有读取消息的正文。即发布的内容。这里是代码:让HTTP POST在制作自己的Java服务器时工作
int port = 1991;
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("The Server is on and listening on port " + port);
System.out.println(" ");
while (true)
{
Socket ClientSocketConnection = serverSocket.accept();
System.err.println("We have established a connection with a client!");
System.out.println(" ");
BufferedReader ServerInput = new BufferedReader(new InputStreamReader(ClientSocketConnection.getInputStream()));
DataOutputStream ServerOutput =new DataOutputStream(ClientSocketConnection.getOutputStream());
String StringInput;
int iCount = 0;
int CountNull = 0;
while ((StringInput = ServerInput.readLine()) != null)
{
System.out.println(StringInput);
}
现在我只显示通过套接字发送的所有东西。但由于某些原因,我只是不明白的请求消息的身体,我知道身体是因为在铬送我有这样的:
我不知道怎么去说,“表单数据”。任何帮助将非常感谢!
UPDATE:
这里的问题是进一步收窄。从发送HTTP请求罚款。使用HTTP POST方法,我们将请求标头设为\ r \ n,然后是消息数据。问题是当我的BufferedData变量ServerInput
读入\ r \ n(空行)时,它停止从ServerInput
读取数据。有任何解决这个问题的方法吗?
您是否收到“Content-length”标头?如果是这样,那么在读取一个空行(表示头部分的结尾)后,读取_Content-length_字节数并将它们转换为字符串。你的问题可能是在你的ServerInput的末尾没有行结束,因此readLine()会永远等待它。 – halfbit
事实上,我确实得到了12的Content-Legnth。我现在会尝试你的建议 – user481610