[英]Post request parameters in Java doesn't work
我試圖處理從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¶m2=b¶m3=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");
您還應該向服務器指示下一個身體的大小:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.