代码之家  ›  专栏  ›  技术社区  ›  Jonas

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

  •  2
  • Jonas  · 技术社区  · 15 年前

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

    HTTP 500 . 如果我只是发送一个空字符串而不是一个带有XML的字符串,我会得到一个错误消息: EMPTY REQUEST

    我不太清楚错误可能是什么,但是连接可以工作,因为错误消息是以XML格式返回的。我只是将XML数据作为字符串发送。有没有可能要求我发一封信 最后?在我的Java代码中如何做到这一点?关于这个问题还有什么其他的想法吗?

    下面是我用来发布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();
            ....
    
    5 回复  |  直到 15 年前
        1
  •  1
  •   BalusC    15 年前

    它看起来很好,应该很好用。这个 connection.setRequestMethod("POST"); connection.setDoOutput(true); .

    Google 告诉我这和 MemoryStream . 我会专注于.NET代码并重新测试/调试它。也许是那些 related SO questions 可能会有帮助。

        2
  •  0
  •   ZZ Coder    15 年前

    您需要通过这样的操作来指定方法POST,

     connection.setRequestMethod("POST");
     connection.setRequestProperty("Content-Length", "" + length);
    

    否则,它将被视为GET,而某些服务器不希望body包含GET,因此流将关闭。

        3
  •  0
  •   Julius Musseau    15 年前

    output.write(request.getBytes("ISO-8859-1"));
    if(output != null) try { output.close(); } catch (IOException e) {}
    
    response = connection.getInputStream();
    

    试试这个(也许再加上同花顺)?

    output.write(request.getBytes("ISO-8859-1"));
    output.flush();
    response = connection.getInputStream();
    
    if(output != null) try { output.close(); } catch (IOException e) {}
    
        4
  •  0
  •   Ha.    15 年前

    不应该吗 &lt;32 而不是 <32 ?

        5
  •  0
  •   Marc van Kempen    15 年前

    output.write(xmlRequestStatus.getBytes("ISO-8859-1"));