从客户端,通过HttpClient发送二进制数据到服务器端

本文介绍如何通过HttpClient从客户端向服务器端发送二进制数据,以实现高效、灵活、稳定的第三方接口通信。客户端代码示例与服务器端接收二进制输入的方法也一并给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实现第三方接口时,通过二进制数据通讯,可以更高效、更灵活、更稳定。

从客户端发起请求的代码如下所示。


  protected  static  byte [] remoteInvoke( byte []  data )  throws  SomeException {
            byte []  ret  =  null ;
          PostMethod  filePost  =  null ;
            try {
              String  targetURL  =  REMOTE_URL  +  sign  ;
                logger .debug(  "REMOTE_URL:" + targetURL  );
                filePost  =  new  PostMethod(  targetURL );
                //增加http 请求输入流
                filePost .setRequestEntity(  new  ByteArrayRequestEntity( data ,  "text/plain; charset=utf-8" ));
              HttpClient  client  =  new  HttpClient();
                 client .getHttpConnectionManager().getParams().setConnectionTimeout(5000);
                int  status  =  client .executeMethod(  filePost );
                if  (  status  == HttpStatus.  SC_OK ) {
                     // 响应回文数组
                     ret  =  filePost .getResponseBody();
              }  else {
                     logger .debug(  "请求出错,状态:"  + status  + ","  + filePost  .getStatusText());
                     logger .debug(  "请求出错,响应:"  + filePost  .getResponseBodyAsString());
                     throw  new  SomeException(  "请求远端数据失败,"  + filePost  .getStatusText());
              }
          }  catch (IOException  e ){
                throw  new  SomeException(  " 请求远端数据 失败,"  + e  .getMessage(), e  );
          }  finally {
                if (  filePost !=  null ){
                     filePost .releaseConnection();
              }
          }
            if (  logger .isDebugEnabled()){
                //logger.debug(String.format("请求:“%s”", SomeUtils.toString(data)));
                //logger.debug(String.format("响应:“%s”", SomeUtils.toString(ret)));
          }
            return  ret ;
     }
     

服务器获取二进制输入的代码如下所示。


     
 protected   static  String getRequestBody(HttpServletRequest  request  )
              throws  IOException, UnsupportedEncodingException {
     
          final   int   BUFFER_SIZE  = 8 * 1024;
          byte []  buffer  =  new   byte [  BUFFER_SIZE ];
         ServletInputStream  sis  request  .getInputStream();
          int   length  = 0;
         ByteArrayOutputStream  baos  new  ByteArrayOutputStream();
     
     
          int   length  = 0;  
          while ((  length    sis .read(  buffer ))>0){   
                 baos .write(  buffer , 0,  length );
         } 
     
         String  bodyData  =  new  String(  baos .toByteArray(),  "UTF-8"  );
          return   bodyData ;
     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值