このPOST
メソッドは、最後に改行文字を追加しません。あなたがする必要があるのは、を取得しContent-Length
、最後の空の行の後にその数の文字を読み取ることです。
例
HTML
次のページがあるとしましょう。
<html>
<head/>
<body>
<form action="http://localhost:12345/test.php" method="POST">
<input type="hidden" name="postData" value="whatever"/>
<input type="hidden" name="postData2" value="whatever"/>
<input type="submit" value="Go"/>
</form>
</body>
</html>
ここで、コードに似た非常に単純なサーバーを起動します(このコードは全体でいっぱいですが、問題ではありません)。
public class Main {
public static void main(final String[] args) throws Exception {
final ServerSocket serverSocket = new ServerSocket(12345);
final Socket clientSocket = serverSocket.accept();
final InputStreamReader reader = new InputStreamReader(clientSocket.getInputStream());
final BufferedReader bufferedReader = new BufferedReader(reader);
int contentLength = -1;
while (true) {
final String line = bufferedReader.readLine();
System.out.println(line);
final String contentLengthStr = "Content-Length: ";
if (line.startsWith(contentLengthStr)) {
contentLength = Integer.parseInt(line.substring(contentLengthStr.length()));
}
if (line.length() == 0) {
break;
}
}
// We should actually use InputStream here, but let's assume bytes map
// to characters
final char[] content = new char[contentLength];
bufferedReader.read(content);
System.out.println(new String(content));
}
}
お気に入りのブラウザにページを読み込んでボタンを押すと、コンソールGo
に本文のコンテンツが表示されます。POST