簡體   English   中英

HTTP刪除與請求正文問題

[英]HTTP Delete with Request Body issues

任何人都可以解釋以下內容:

package com.foo.bar;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import org.springframework.util.FileCopyUtils;

public class ATest {

    public static void main(String[] args) throws Exception {
       try {
           final String payload = "{\"parentExecutor\":\"foo1233\"}";
           URL url = new URL("http://localhost/notes");
           final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
           connection.setRequestMethod("DELETE");
           connection.setRequestProperty("Accept", "application/json");
           connection.setRequestProperty("Content-Type", "application/json");
           FileCopyUtils.copy(payload.getBytes(), connection.getOutputStream());
           connection.connect();
           final InputStream is = connection.getInputStream();
           int b = is.read();
           String result = "";
           while (b != -1) {
               result += (char) b;
               b = is.read();
           }
           System.out.println(connection.getResponseCode());
           System.out.println(result);
           is.close();
       }
       catch (final ProtocolException e) {
          e.printStackTrace();
       }
   }
}

上面的示例拋出以下異常:

java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:995)
    at com.foo.bar.ATest.main(ATest.java:24)

但是,如果我添加對setDoOutput(true)的調用, 則會引發以下異常:

java.net.ProtocolException: HTTP method DELETE doesn't support output
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1004)
    at com.foo.bar.ATest.main(ATest.java:25)

然后,如果我將協議從http更改為https,則不會引發異常,並且會從服務器獲取預期的響應代碼和內容。 我查看了源代碼,可以跟蹤調用並跟蹤發生異常的位置,但是為什么可以通過HTTPS而不是HTTP發出這樣的請求呢?

這是HttpURLConnection的局限性(我認為這是一個Bug或至少是一個愚蠢的功能)。 在使用URLConnection處理REST Web服務時,您不是唯一遇到此問題的人。

考慮改用Apache HttpComponents Client

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM