簡體   English   中英

Java中的發布請求參數不起作用

[英]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&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");

您還應該向服務器指示下一個身體的大小:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM