Java HTTP PUT不发送数据

时间:2014-04-02 18:23:20

标签: java web-services http rest url

我想通过HTTP PUT向服务器发送一些数据(调用REST Web服务)。以下是代码..

URL urlObj = new URL("http://99.66.66.238:8443/media/service");
          HttpURLConnection conn = (HttpURLConnection) urlObj
                .openConnection();
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod("PUT");
        conn.setRequestProperty("accept-charset", "UTF-8");
        conn.setRequestProperty("content-type",
                "application/x-www-form-urlencoded");

        String userPassword = username + ":" + password;
        byte[] authEncBytes = Base64.encodeBase64(userPassword.getBytes());
        String authStringEnc = new String(authEncBytes);
        conn.setRequestProperty("Authorization", "Basic " + authStringEnc);

        OutputStreamWriter writer = new OutputStreamWriter(
                conn.getOutputStream(), "UTF-8");
        writer.write(requestXML);
        conn.getOutputStream().flush();

但另一方面,他们没有得到数据。他们只看到..

PUT /media/service HTTP/1.1
accept-charset: UTF-8
content-type: application/x-www-form-urlencoded
Authorization: Basic cm10dGVzdDpwYXNzd29yZA=3D=3D
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.6.0_13
Accept: text/html, image/gif, image/jpeg, *; q=3D.2, */*; q=3D.2
Connection: keep-alive
Content-Length: 0 

注意Content-Length是如何为0.你能否告诉我为什么数据没有通过?无论如何我能看到我发送的确切内容吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您还需要刷新输出所有缓冲输出。也许你只想使用:

conn.getOutputStream().write(requestXML.getBytes("UTF-8"));

这会自动刷新输出。

答案 1 :(得分:0)

你不应该在编写器上调用flush()而不是连接的输出流吗?在我刷新连接的输出流时,数据可能仍然在编写器的缓冲区中,这可以解释发送的0字节。