gpt4 book ai didi

java - Java 中的 Post 请求参数不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 20:52:25 25 4
gpt4 key购买 nike

我已经尝试处理从 java 文件到 PLAY 服务器的 POST 请求。在服务器上,我将参数打印为 request().body().asText(),如果我在终端中使用 curl 命令,它会起作用。但是,如果我尝试使用 java 文件进行 POST,它总是打印 null。我尝试了该站点的多个示例,但它总是打印出 null。 (但是我确实得到了正确的返回值,所以我确实连接到了服务器)。

import java.lang.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class javaa{
public static void main(String[] args){
try{
String urlParameters = "param1=a&param2=b&param3=c";
URL url = new URL("http://localhost:9000/createPerson");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setDoOutput(true);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

writer.write(urlParameters);
writer.flush();

String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
writer.close();
conn.disconnect();
}
catch(Exception e){
System.out.println(e);
}
}
}

最佳答案

你忘了设置POST方法,默认情况下它是一个GET,可以通过添加

 conn.setRequestMethod("POST");

您还应该将内容类型设置为 application/x-www-form-urlencoded,如下所示:

conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");

您还应该向服务器指示您的 body 尺寸,如下所示:

byte[] requestBody = urlParameters.getBytes("UTF-8");
conn.setFixedLengthStreamingMode(requestBody.length);

所以最后的代码看起来像这样:

conn.setRequestMethod("POST");
conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
byte[] requestBody = urlParameters.getBytes("UTF-8");
conn.setFixedLengthStreamingMode(requestBody.length);
try (OutputStream out = conn.getOutputStream()) {
out.write(requestBody);
out.flush();
}

响应更新

根据您的评论,您应该重试:

conn.addRequestProperty("Content-Type", "text/plain");

代替:

conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");

关于java - Java 中的 Post 请求参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37554121/

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