【问题标题】:Java - HttpURLConnection PUT request with empty bodyJava - 带有空正文的 HttpURLConnection PUT 请求
【发布时间】:2018-09-28 13:10:13
【问题描述】:

我正在尝试使用 Java 发出请求,当我像这样使用 cURL 调用它时,它可以工作:

curl -X PUT http://serverurl.com/method/6eb276a2-5c79-4f6e-a4b5-a26b0e6848c7/action  -H 'Content-Type: application/json' -H 'Token: cba5f12c-af55-480f-970e-525e446ef153' -H 'Content-Length : 0'

如果我在没有传递标头 Content-Length 参数的情况下调用相同的请求,我会收到 411 HTTP 错误,需要长度。

这是我的 Java 代码:

URL url = new URL("http://serverurl.com/method/6eb276a2-5c79-4f6e-a4b5-a26b0e6848c7/action");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.addRequestProperty("Content-Type", "application/json");
con.addRequestProperty("Token", "cba5f12c-af55-480f-970e-525e446ef153");
con.connect();

此请求收到 411 HTTP 代码响应。所以,我尝试添加:

con.addRequestProperty("Content-Length", "0");

但是不行,所以我改成:

URL url = new URL("http://serverurl.com/method/6eb276a2-5c79-4f6e-a4b5-a26b0e6848c7/action");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.addRequestProperty("Content-Type", "application/json");
con.addRequestProperty("Token", "cba5f12c-af55-480f-970e-525e446ef153");
con.setDoOutput(true);
con.getOutputStream().close();
con.setFixedLengthStreamingMode(0);
con.connect();

但现在我得到了 400 个 HTTP 代码。

如何使用空正文执行 PUT 请求并设置内容长度以匹配 cURL 调用?

【问题讨论】:

    标签: java curl httpurlconnection put


    【解决方案1】:

    使用 HttpUrlConnection,您应该使用 setRequestProperty 方法将标头添加到您的请求中。我可以看到您使用“addRequestProperty”,这可能是它不起作用的原因。但请参阅此链接以获取更多信息https://juffalow.com/java/how-to-send-http-get-post-request-in-java 以及我用于放置请求的一些代码

            URL url = new URL(BASE_URL+"/"+userID+".json");
            urlRequest = (HttpURLConnection) url.openConnection();
            urlRequest.setDoOutput(true);
            urlRequest.setRequestMethod("PUT");
            urlRequest.setRequestProperty("Content-Type", "application/json; 
            charset=UTF-8");
            OutputStream os = urlRequest.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
    
            osw.write("{\"idToken\":\""+"token"+"\"}");
    
    
            osw.flush();
            osw.close();
    
            urlRequest.connect();
            JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) 
            urlRequest.getContent()));//Convert the input stream to a json element
    
            JsonObject rootobj = root.getAsJsonObject();//Maybe an array or object
    

    嗯,这只是我使用的示例......我希望这对你有用。编码愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2021-03-12
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多