[英]Java - HttpURLConnection PUT request with empty body
我正在嘗試使用 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 調用?
使用 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
好吧,這只是我使用的示例......我希望這對你有用。 快樂編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.