【问题标题】:Java HTTP PUT not sending the dataJava HTTP PUT 不发送数据
【发布时间】:2014-05-14 05:36:15
【问题描述】:

我想通过 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。你能告诉我为什么数据没有通过吗?无论如何我可以确切地看到我发送的内容吗?

谢谢。

【问题讨论】:

  • 您是否尝试过设置 Content-Length 和 Content-type 标头?可能是因为未设置标头,因此服务器懒得读取任何内容。

标签: java web-services http rest url


【解决方案1】:

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

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

这会自动刷新输出。

【讨论】:

  • 感谢保罗,这很有效。对方得到了输出。现在只有一个问题是“3D”字样似乎附加到了 XML 的第一行。。你为什么知道会发生这种情况?
  • 你可以使用javax.mail.internet.MimeUtility这个类。例如。 ByteArrayInputStream is = new ByteArrayInputStream(str.getBytes("UTF-8")); InputStream out = MimeUtility.decode(is, "quoted-printable");
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多