远程连接工具类

package org.wxz.tools.oracle.protocol.util;

import java.io.File;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map.Entry;

import org.wxz.tools.oracle.empty.util.EmptyUtil;
import org.wxz.tools.oracle.empty.util.NullUtil;
import org.wxz.tools.oracle.exception.print.util.ExceptionPrintUtil;
import org.wxz.tools.oracle.io.util.IOCloseUtil;
import org.wxz.tools.oracle.io.util.IOOpenUtil;
import org.wxz.tools.oracle.io.util.IOReadUtil;
import org.wxz.tools.oracle.protocol.callback.URLConnectionCallback;
import org.wxz.tools.oracle.protocol.callback.impl.IOReadCallbackImpl;
import org.wxz.tools.oracle.protocol.enumeration.ProtocolNameEnum;
import org.wxz.tools.oracle.protocol.http.util.HttpURLConnectionUtil;
import org.wxz.tools.oracle.protocol.https.util.HttpsURLConnectionUtil;
import org.wxz.tools.oracle.protocol.param.URLConnectionRequsetParam;
import org.wxz.tools.oracle.protocol.proxy.util.ProxyUtil;

/**
* 远程连接工具类
*
* @author XiongZhi.Wu 2018年1月24日
*/
public abstract class URLConnectionUtil {
/**
* 初始化
*
* @author XiongZhi.Wu 2018年1月24日
* @param uRLConnectionRequsetParam
* 远程连接请求参数
* @return
*/
public static URLConnection init(URLConnectionRequsetParam uRLConnectionRequsetParam) {
try {
URL url = new URL(uRLConnectionRequsetParam.getAddr());
return NullUtil.isNull(uRLConnectionRequsetParam.getProxyParam()) ? url.openConnection() : url.openConnection(ProxyUtil.initProxy(uRLConnectionRequsetParam.getProxyParam()));
} catch (Exception e) {
throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel(e, “Init URL Connection Cause Exception.”));
}
}

/**
 * 读取字节
 * 
 * @author XiongZhi.Wu 2018年1月24日
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 * @return
 */
public static byte[] readByte(URLConnectionRequsetParam uRLConnectionRequsetParam) {
    return (byte[]) readAll(uRLConnectionRequsetParam, new URLConnectionCallback() {

        @Override
        public Object service(URLConnection urlConnection, URLConnectionRequsetParam uRLConnectionRequsetParam) {
            return receive(urlConnection);
        }
    });
}

/**
 * 读取文本
 * 
 * @author XiongZhi.Wu 2018年1月24日
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 * @return
 */
public static String readText(URLConnectionRequsetParam uRLConnectionRequsetParam) {
    return (String) readAll(uRLConnectionRequsetParam, new URLConnectionCallback() {

        @Override
        public Object service(URLConnection urlConnection, URLConnectionRequsetParam uRLConnectionRequsetParam) {
            return receive(urlConnection, uRLConnectionRequsetParam);
        }
    });
}

/**
 * 读取全部
 * 
 * @author XiongZhi.Wu 2018年1月24日
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 * @param urlConnectionCallback
 *            远程连接回调接口
 * @return
 */
public static Object readAll(URLConnectionRequsetParam uRLConnectionRequsetParam, URLConnectionCallback urlConnectionCallback) {
    if (uRLConnectionRequsetParam.getAddr().contains(ProtocolNameEnum.HTTP.getValue() + "://")) {
        return HttpURLConnectionUtil.readAll(uRLConnectionRequsetParam, urlConnectionCallback);
    } else if (uRLConnectionRequsetParam.getAddr().contains(ProtocolNameEnum.HTTPS.getValue() + "://")) {
        return HttpsURLConnectionUtil.readAll(uRLConnectionRequsetParam, urlConnectionCallback);
    } else {
        throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel("No Such Protocol Cause Exception."));
    }
}

/**
 * 发送数据
 * 
 * @author XiongZhi.Wu 2018年5月15日
 * @param urlConnection
 *            远程连接对象
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 */
public static void send(URLConnection urlConnection, URLConnectionRequsetParam uRLConnectionRequsetParam) {
    // 存在参数或者附件信息
    if (EmptyUtil.isNotNull(uRLConnectionRequsetParam.getContent()) || EmptyUtil.isNotNull(uRLConnectionRequsetParam.getFiles())) {
        // 定义分割线
        String boundary = "----------" + System.currentTimeMillis() + "----------";
        // 设置请求属性
        urlConnection.setRequestProperty("content-type", "multipart/form-data;boundary=" + boundary);
        // 输出流对象
        OutputStream outputStream = null;
        try {
            // 实例输出流对象
            outputStream = urlConnection.getOutputStream();
            // 存在参数信息
            if (EmptyUtil.isNotNull(uRLConnectionRequsetParam.getContent())) {
                for (Entry<String, Object> entry : uRLConnectionRequsetParam.getContent().entrySet()) {
                    String key = entry.getKey();
                    if (EmptyUtil.isNull(key)) {
                        continue;
                    }
                    Object value = entry.getValue();
                    send(outputStream, "--" + boundary + "\r\n", uRLConnectionRequsetParam);
                    send(outputStream, "Content-Disposition:form-data;name=\"" + key + "\"\r\n\r\n", uRLConnectionRequsetParam);
                    send(outputStream, (NullUtil.isNull(value) ? "" : value) + "\r\n", uRLConnectionRequsetParam);
                }
            }
            // 存在附件信息
            if (EmptyUtil.isNotNull(uRLConnectionRequsetParam.getFiles())) {
                for (Entry<String, File> entry : uRLConnectionRequsetParam.getFiles().entrySet()) {
                    String key = entry.getKey();
                    if (EmptyUtil.isNull(key)) {
                        continue;
                    }
                    File value = entry.getValue();
                    if (EmptyUtil.isNull(value)) {
                        continue;
                    }
                    send(outputStream, "--" + boundary + "\r\n", uRLConnectionRequsetParam);
                    send(outputStream, "Content-Disposition:form-data;name=\"" + key + "\";filename=\"" + value.getName() + "\"\r\n", uRLConnectionRequsetParam);
                    send(outputStream, "Content-Type:application/x-msdownload\r\n\r\n", uRLConnectionRequsetParam);
                    IOReadUtil.loopRead(IOOpenUtil.initFileInputStream(value), new IOReadCallbackImpl(outputStream));
                    send(outputStream, "\r\n", uRLConnectionRequsetParam);
                }
            }
            // 分割线收尾
            send(outputStream, "--" + boundary + "--\r\n", uRLConnectionRequsetParam);
        } catch (Exception e) {
            // 打印异常信息
            throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel(e, "Remote Read Send Param Cause Exception."));
        } finally {
            // 关闭输出流
            IOCloseUtil.closeOutputStream(outputStream);
        }
    } else {
        try {
            // 打开连接
            urlConnection.connect();
        } catch (Exception e) {
            throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel(e, "UrlConnection To Connect Failure Cause Exception."));
        }
    }
}

/**
 * 发送数据
 * 
 * @author XiongZhi.Wu 2018年5月15日
 * @param outputStream
 *            输出流对象
 * @param data
 *            待发送数据
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 * @throws Exception
 *             异常信息
 */
public static void send(OutputStream outputStream, String data, URLConnectionRequsetParam uRLConnectionRequsetParam) throws Exception {
    outputStream.write(data.getBytes(uRLConnectionRequsetParam.getWriteCharsetName()));
}

/**
 * 接收数据
 * 
 * @author XiongZhi.Wu 2018年6月5日
 * @param urlConnection
 *            远程连接对象
 * @return
 */
public static byte[] receive(URLConnection urlConnection) {
    try {
        return IOReadUtil.loopRead(IOOpenUtil.initBufferedInputStream(urlConnection.getInputStream()));
    } catch (Exception e) {
        throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel(e, "Remote Read Receive Data Cause Exception."));
    }
}

/**
 * 接收数据
 * 
 * @author XiongZhi.Wu 2018年6月5日
 * @param urlConnection
 *            远程连接对象
 * @param uRLConnectionRequsetParam
 *            远程连接请求参数
 * @return
 */
public static String receive(URLConnection urlConnection, URLConnectionRequsetParam uRLConnectionRequsetParam) {
    try {
        return IOReadUtil.loopRead(IOOpenUtil.initBufferedReader(urlConnection.getInputStream(), uRLConnectionRequsetParam.getReadCharsetName()));
    } catch (Exception e) {
        throw new RuntimeException(ExceptionPrintUtil.initExceptionPrintModel(e, "Remote Read Receive Data Cause Exception."));
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值