Java - 带有空主体的 HttpURLConnection PUT 请求

标签 java curl 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'

如果我在不传递 header 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 方法将 header 添加到您的请求中。我可以看到您正在使用“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

好吧,这只是我使用的示例...我希望这对您有用。快乐编码。

关于Java - 带有空主体的 HttpURLConnection PUT 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52556138/

相关文章:

php - Bigcommerce getOrders() 超时行 198(parseHeader?)

amazon-web-services - S3 静态网站上的 https 卡住

linux - 在后台使用curl_exec发布数据返回0

java - 跟随 google "I' m feeling lucky"使用 httpURLConnection 重定向

java - 尝试将连接对象传递给另一个 java 类时出现 NullPointerException

Java:查找字符串中最短的单词并将其打印出来

Java,模拟浏览器

java - HttpUrlConnection 读取输入流 - 不同的输出结果

java - HBase 中的行过滤器

java - 多对一搜索查询