在Java中使用POST方法时出现411 HTTP错误

在Java中使用POST方法时出现411 HTTP错误,java,rest,url,post,Java,Rest,Url,Post,现在我在Java中使用POST方法时遇到了一个问题。我收到 线程“main”java.lang.RuntimeException中出现异常:服务器返回URL的HTTP响应代码:411 我在任何地方都找不到任何可用的文档。没有一个是有用的。我怎么修理它 我的代码 如果你仍然有困难,也许这会有帮助。我没有测试,机器没有安装java 还应设置所需的所有其他标题 public static String PostRequest(String requestUrl, String username, St

现在我在Java中使用
POST
方法时遇到了一个问题。我收到

线程“main”java.lang.RuntimeException中出现异常:服务器返回URL的HTTP响应代码:
411

我在任何地方都找不到任何可用的文档。没有一个是有用的。我怎么修理它

我的代码
如果你仍然有困难,也许这会有帮助。我没有测试,机器没有安装java

还应设置所需的所有其他标题

public static String PostRequest(String requestUrl, String username, String password) {
    StringBuilder jsonString = new StringBuilder();
    HttpURLConnection connection = null;
    try {
        URL url = new URL(requestUrl);
        connection = (HttpURLConnection)url.openConnection();
        byte[] authData = Base64.encode((username + password).getBytes());
        connection.setRequestMethod("POST");
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestProperty("Authorization", "Basic " + new String(authData));
        connection.setRequestProperty("Content-Length", String.valueOf(authData.length));
        try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) {
            writer.writeBytes("REPLACE ME WITH DATA TO BE WRITTEN");
            writer.flush();
        }
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            String data = null;
            while ((data = reader.readLine()) != null) {
                jsonString.append(data);
            }
        }
    } catch (IOException ex) {
        //Handle exception.
    } finally {
        if (connection != null)
            connection.disconnect();
    }
    return jsonString.toString();
}

工作方法:

public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) {

    URL url;
    String response = "";
    try {
        url = new URL(requestURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(getPostDataString(postDataParams));

        writer.flush();
        writer.close();
        os.close();
        int responseCode=conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            response = br.readLine();
        }
        else {
            response="Error Registering";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return response;
}


private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }

若使用post方法,则应在正文中发送空数据。
例如,如果您使用的是json数据,则需要发送“{}”

您的请求没有正文。那个么,为什么要指定
内容长度
标题并将其设置为URL的长度呢?尝试将其删除或设置为0
setDoOutput
不需要太多。甚至不需要POST请求,但“是”状态代码411表示内容长度有问题。@MaximDobryakov我删除了内容长度和setDoOutput,但它仍然存在。@Dillon我需要一篇文章,因为我的url是正确的。如果您正在请求文章,而实际上没有向其发布任何数据,服务器将拒绝该请求。您的代码没有显示您正在写入输出流。感谢您的帮助。我会立即尝试并通知您。它仍然是一样的。我会尝试,但我的URL不包含POST方法的任何参数。你知道吗?你的url不需要任何参数。您的url可以是
http://example.com/xyz.php
。创建一个hashmap并添加您的post值:
hm.put(“uname”,uname)并调用该方法<代码>sendPostRequest(请求URL,hm)亲爱的Pranjal,您的代码修复了我的问题。非常感谢你的帮助+1顺便问一下,如何将JSON库添加到IDE?我使用的是Intellij IDEA。虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。您可以使用该按钮改进此答案,以获得更多选票和声誉!
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) {

    URL url;
    String response = "";
    try {
        url = new URL(requestURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(getPostDataString(postDataParams));

        writer.flush();
        writer.close();
        os.close();
        int responseCode=conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            response = br.readLine();
        }
        else {
            response="Error Registering";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return response;
}


private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }
public JSONObject getPostResult(String json){
    if(!json.isEmpty()) {
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON_ERROR", "Error parsing data " + e.toString());
        }
    }
    return jObj;
}
public void Post() throws Exception {
 StringBuffer d = new StringBuffer();
        String da = "ClearanceDate=2020-08-31&DepositeDate=2020-08-31&BankTransactionNo=UATRYU56789";
        URL url = new URL("https://abcd/AddReceipt?" + da);
        byte[] postDataBytes = ("https://abcd/AddReceipt?" + da).toString()
                .getBytes("UTF-8");
        System.out.println("Data--" + postDataBytes);
        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
        // con.setRequestProperty("User-Agent",
        // "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        con.setRequestProperty("Content-Length",
                String.valueOf(postDataBytes.length));
        con.setRequestProperty(
                "Authorization",
                "Bearer "
                        + "o731WGgp1d913ZOYivnc55yOg0y1Wk7GsT_mnCUKOJf1VChYOdfRjovAxOhyyPKU93ERue6-l9DyG3IP29ObsCNTFr4lGZOcYAaR96ZudKgWif1UuSfVx4AlATiOs9shQsGgb1oXN_w0NRJKvYqD0LLsZLstBAzP1s5PZoaS9c6MmO32AV47FUvxRT6Tflus5DBDHji3N4f1AM0dShbzmjkBCzXmGzEDnU6Jg1Mo5kb884kParngKADG5umtuGbNzChQpMw_A0SyEYaUNh18pXVmnNhqM3Qx5ZINwDEXlYY");
        con.setRequestProperty("Accept", "application/json");
        con.setDoInput(true);
        con.setDoOutput(true);
        con.getOutputStream().write(postDataBytes);
        int status = con.getResponseCode();
        System.out.println("Response status: " + status + "|"
                + con.getResponseMessage());
        BufferedReader in = new BufferedReader(new InputStreamReader(
                con.getInputStream()));
        String inputLine;
        StringBuffer content = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        in.close();
        con.disconnect();
        System.out.println("Response status: " + status);
        System.out.println(content.toString());
        System.out.print("Raw Response->>" + d);

    }