使用http发送二进制数据

时间:2013-09-11 13:01:54

标签: java http post

我需要发送二进制消息,该消息分为两部分:

  1. 第一部分是4个字节,它有一些信息(比方说整数)
  2. 第二部分有一个XMLtext流。
  3. 我之前从未做过这样的事情,我怎么能这样做?

    我的代码是这样的:

    public String serverCall(String link, String data){
             HttpURLConnection connection;
             OutputStreamWriter writer = null;
    
             URL url = null;
             String parameters = data;
    
             try
             {
                 url = new URL(link);
                 connection = (HttpURLConnection) url.openConnection();
                 connection.setDoOutput(true);
                 connection.setRequestProperty("Content-Type", "text/xml");
                 connection.setRequestMethod("POST");    
    
                 writer = new OutputStreamWriter(connection.getOutputStream());
                 writer.write(parameters);
                 writer.flush();
                 writer.close();
              }
              catch(IOException e)
              {
                  e.printStackTrace();
              }
    }
    

    如何将XML设置为4个字节,如何在其之前有4个字节的文本?

2 个答案:

答案 0 :(得分:1)

(Info)HTTP协议使用方法PUT“在服务器上传输文件”(而不是POST)。

二进制数据的传输最好没有内容类型“text / ...”而是“application / bin”。

然而,您可以将XML发送为“text / xml; charset = UTF-8”,并使用您自己的标题

connection.setHeader("MyCode",
    String.format("%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3]));

如果以二进制形式发送all,请不要使用Writer(将字节转换为某些字符编码),而是使用Stream(BufferedOutputStream)。 XML为:

byte[] xmlBytes = xml.getBytes("UTF-8");

如果<?xml ...>中没有提及其他编码,则为UTF-8。

close()已经刷新,因此不需要flush()

答案 1 :(得分:0)

如果消息的二进制部分仅为4个字节,则对其进行百分比编码并将其作为附加的url参数发送。或者,将其添加到现有的xml流中。

java类UriURLEncoder提供了必要的方法。