代码
public HttpRequest(BufferedReader from) {
String firstLine = "";
try {
firstLine = from.readLine();
} catch (IOException e) {
System.out.println("Error reading request line: " + e);
}
String[] tmp = firstLine.split(" ");
method = tmp[0];
URI = tmp[1];
version = tmp[2];
System.out.println("URI is: " + URI);
if(method.equals("POST")){
try {
String line = from.readLine();
while (line.length() != 0) {
headers += line + CRLF;
if (line.startsWith("Host:")) {
tmp = line.split(" ");
if (tmp[1].indexOf(':') > 0) {
String[] tmp2 = tmp[1].split(":");
host = tmp2[0];
port = Integer.parseInt(tmp2[1]);
} else {
host = tmp[1];
port = HTTP_PORT;
}
}
line = from.readLine();
}
headers += "Connection: close" + CRLF;
headers += CRLF;
}
catch (IOException e) {
System.out.println("Error reading from socket: " + e);
return;
}
}
else {
System.out.println("Error: Method not supported");
return;
}
System.out.println("Host to contact is: " + host + " at port " + port);
}
问题
我正在使用Java制作代理服务器。
上面的代码处理HTTP POST请求。它成功读取POST标头并在命令提示符下打印,但缺少正文。
您可以查看我的代码并查看问题吗?感谢。
(注意:我排除了GET部分,因为没有问题。)
结果
答案 0 :(得分:2)
问题是你仍然需要在InputStream上阅读。这就是为什么当你关闭浏览器时,没有别的东西可以阅读,所以打印出来。您必须准确读取“Content-Length”
中声明的字节数尝试这样的事情:
int cL = Integer.valueOf(contentLength);
byte[] buffer = new byte[cL];
String postData = "";
System.out.println("Reading "+ cL + "bytes");
in.read(buffer, 0, cL);
postData = new String(buffer, 0, buffer.length);
System.out.println(postData);
正文请求将在postData字符串中。
答案 1 :(得分:0)
这不是如何编写代理服务器。代理服务器只需执行以下操作:
就是这样。没有解析POST请求或任何其他要求。甚至不是读者。