java - 使用 Java 将 XML 数据发布到 API 时出现问题

标签 java xml http-post eof outputstream

我在使用 HTTP POST 将 XML 数据发送到 API 时遇到问题。

如果我发送格式良好的 XML,我会收到一条错误消息:

Server Exception: Cannot access a closed Stream

如果 XML 格式不正确,我将得到 HTTP 500。如果我只是发送一个空字符串而不是带有 XML 的字符串,我会收到一条错误消息:EMPTY REQUEST

我对错误可能是什么没有太多想法,但连接有效,因为错误消息以 XML 格式返回。我只是将 XML 数据作为字符串发送。是否有可能我需要在最后发送一个EOFsomething?我如何在我的 Java 代码中做到这一点?关于问题可能是什么的任何其他想法?

API 是在 .NET 中制作的

这是我用来发布 XML 数据的 Java 代码:

  Authenticator.setDefault(new MyAuthenticator());
  String xmlRequestStatus = 
  "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><test><data>32</data></test>";
  System.out.println(xmlRequestStatus);
  String contentType = "text/xml";
  String charset = "ISO-8859-1";
  String request = null;
  URL url = null;
  HttpURLConnection connection = null;
  OutputStream output = null;
  InputStream response = null;
  try {
   url = new URL("http://127.0.0.1/test");
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }

  try {
   connection = (HttpURLConnection)url.openConnection();
   connection.setDoOutput(true);
   connection.setRequestMethod("POST");
   connection.setRequestProperty("Accept-Charset", charset);
   connection.setRequestProperty("Content-Type", contentType);
   output = connection.getOutputStream();
   output.write(request.getBytes("ISO-8859-1"));
   if(output != null) try { output.close(); } catch (IOException e) {}

   response = connection.getInputStream();
        ....

最佳答案

它看起来不错,应该可以正常工作。 connection.setRequestMethod("POST"); 在您已经执行 connection.setDoOutput(true); 时完全多余。

由于此错误直接来自本地主机上托管的 .NET 网络服务,您确定它的编写没有错误吗?我不做 .NET,但是 Google我了解到它与 MemoryStream 有关。我会专注于 .NET 代码并重新测试/调试它。也许那些 related SO questions可能有帮助。

关于java - 使用 Java 将 XML 数据发布到 API 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145585/

相关文章:

android - 如何在 Http post Android 中取得进展?

java - 京都柜和Scala(Java) : Limit of DB files open?

java - 调试 RMI 连接

java - 为应用程序生成测试数据

c# - .NET Web 服务接收 HTTP POST 请求 (500) 内部服务器错误

objective-c - 使用 Objective-C 发布多部分/表单数据

java - 电话间隙 : BluetoothChatExample [Android]

java - 写入 ObjectOutputStream 并返回垃圾

python - 修复 Python 的 lxml 中的 tostring()

java - Jackson XML + 不要将值包装在标签中