java - Java - 带有空正文的 HttpURLConnection PUT 请求
问题描述
我正在尝试使用 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
好吧,这只是我使用的样本......我希望这对你有用。快乐编码。
推荐阅读
- python - 如何使多个套接字 DDE 和 RTD 请求更快
- swift - 如何修复 setValue:forUndefinedKey
- r - R中的dcast fun.aggregate=sum错误地对最后一个可用列求和
- php - 如何查看 PHP 中选中了哪些复选框?
- node.js - 无法将文件上传到 Node.js,使用 Multer 表示后端
- python - 关于将float转换为0和1错误的问题
- python - 如何在 pipenv 环境中处理 `pip install`(不反映在 Pipfile 中,仅反映在 `pipenv graph` 中)?
- python - discord.py 如何制作 requirements.txt
- javascript - 我需要帮助将 jquery 转换为普通的 javascript
- r - xaringan中的“增量方程”?