package com.yd.ifm.client.caller.util.http;import java.util.Map;import com.yd.ifm.client.caller.model.ResponseData; import com.yd.ifm.client.caller.util.http.HttpEnum.ContentTypeEnum;public interface IfmHttpClient {/*** 发送post数据* 200为正常的业务数据,202为IfmClient的一些授权不通过或者异常信息* headerMap 需要放在Http客户端的header中* data 为body中的业务数据* @param strUrlPath* @param params* @param encode* @return*/ResponseData postData(String strUrlPath, Map<String, String> headerMap, String data, String encode, ContentTypeEnum contentType); }
package com.yundaex.wms.config.clent;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map;import org.apache.log4j.Logger;import com.yd.ifm.client.caller.model.ResponseData; import com.yd.ifm.client.caller.util.http.HttpEnum.ContentTypeEnum; import com.yd.ifm.client.caller.util.http.HttpEnum.RequestMethodEnum; import com.yd.ifm.client.caller.util.http.IfmHttpClient;/*** <pre>* Title: MyIfmHttpClient.java* Description: * Copyright: yundaex.com Copyright (c) 2017* Company: 上海韵达货运有限公司* </pre>* * @author tonglele* @version 1.0* @date 2017年9月15日*/ public class MyIfmHttpClient implements IfmHttpClient {private final static Logger log = Logger.getLogger(MyIfmHttpClient.class);private final static String CONTENT_TYPE = "Content-Type";private final static String CONTENT_LENGTH = "Content-Length";private final static String ZERO = "0";@Overridepublic ResponseData postData(String strUrlPath, Map<String, String> params, String data, String encode,ContentTypeEnum contentType) {byte[] bodybyte = getRequestData(data, encode);// 获得请求体ResponseData responsedata = new ResponseData();OutputStream outputStream = null;InputStream inptStream = null;try {URL url = new URL(strUrlPath);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setConnectTimeout(20000); // 设置连接超时时间httpURLConnection.setDoInput(true); // 打开输入流,以便从服务器获取数据httpURLConnection.setDoOutput(true); // 打开输出流,以便向服务器提交数据httpURLConnection.setRequestMethod(RequestMethodEnum.POST.getMethod()); // 设置以Post方式提交数据httpURLConnection.setUseCaches(false); // 使用Post方式不能使用缓存httpURLConnection.setReadTimeout(60000); // 设置读取数据的超时时间// 添加控制权限的header addHeader(params, httpURLConnection);// 设置请求体的类型是文本类型 httpURLConnection.setRequestProperty(CONTENT_TYPE, contentType.getType());// 设置请求体的长度 httpURLConnection.setRequestProperty(CONTENT_LENGTH,bodybyte == null ? ZERO : String.valueOf(bodybyte.length));// 获得输出流,向服务器写入数据outputStream = httpURLConnection.getOutputStream();if (bodybyte != null)outputStream.write(bodybyte);outputStream.flush();int responsecode = httpURLConnection.getResponseCode(); // 获得服务器的响应码 responsedata.setError_code(responsecode);// 200表示有正常的业务数据 202则表示有callee的异常if (responsecode == HttpURLConnection.HTTP_OK || responsecode == 202) {inptStream = httpURLConnection.getInputStream();responsedata.setData(dealResponseResult(inptStream));}} catch (IOException e) {log.error("error while using IfmHttpUtil" + e);return responsedata;} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {log.error("error while using IfmHttpUtil" + e);}}if (inptStream != null) {try {inptStream.close();} catch (IOException e) {log.error("error while using IfmHttpUtil" + e);}}}return responsedata;}private byte[] getRequestData(String content, String encode) {byte[] result = null;try {if (content != null)result = content.getBytes(encode);} catch (UnsupportedEncodingException e) {log.error("error while using IfmHttpUtil" + e);}return result;}/*** 处理服务器返回结果* * @param inputStream* 输入流* @return 返回处理后的String 字符串*/private String dealResponseResult(InputStream inputStream) {String resultData = null; // 存储处理结果ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] data = new byte[1024];int len = 0;try {while ((len = inputStream.read(data)) != -1) {byteArrayOutputStream.write(data, 0, len);}resultData = new String(byteArrayOutputStream.toByteArray(), "utf-8");} catch (IOException e) {log.error("error while using IfmHttpUtil" + e);}return resultData;}/*** 将权限信息放在header中* * @param headerMapper* @param connection*/private void addHeader(Map<String, String> headerMapper, HttpURLConnection connection) {for (Map.Entry<String, String> entry : headerMapper.entrySet()) {connection.addRequestProperty(entry.getKey(), entry.getValue());}}}