gpt4 book ai didi

java - 为什么我不能从 java 中的 POST 请求中读取正文?

转载 作者:可可西里 更新时间:2023-11-01 17:11:14 25 4
gpt4 key购买 nike

代码

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 header 并在命令提示符中打印它,但正文丢失。

你能看看我的代码并找出问题所在吗?谢谢。

(注意:我排除了 GET 部分,因为它没有问题。)

结果

Result

Result

最佳答案

问题是您仍然需要在 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 字符串中。

关于java - 为什么我不能从 java 中的 POST 请求中读取正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12720324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com