Java - 使用空主体的HttpURLConnection PUT请求

3

我正在尝试使用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调用?

1个回答

0

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

        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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接