package com.fzzy.push.gb2022; import com.alibaba.fastjson.JSON; import com.fzzy.api.dto.ResponseDto; import com.fzzy.gateway.data.GatewayResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import java.io.*; import java.net.*; import java.util.*; /** * @author: vincexu * @ClassName: HttpClientUtil.java */ @Slf4j public class HttpClientUtil { /** * post formData * * @param url * @param map * @return * @throws Exception */ @SuppressWarnings("resource") public static ResponseDto postFormData(String url, Map map) throws Exception { log.info("---------接口请求地址:" + url + "----------参数:" + JSON.toJSONString(map) + "---------"); BufferedReader in = null; URL urls = new URL(url); HttpURLConnection connection = null; OutputStream outputStream = null; String rs = ""; String JSESSIONID = (String) map.get("JSESSIONID"); ResponseDto responseDto; try { connection = (HttpURLConnection) urls.openConnection(); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork"); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8"); connection.setRequestProperty("Accept", "*/*"); connection.setRequestProperty("Range", "bytes=" + ""); connection.setConnectTimeout(20000); connection.setReadTimeout(30000); connection.setRequestMethod("POST"); if (StringUtils.isNotEmpty(JSESSIONID)) { // connection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID); // connection.setRequestProperty(" Set-Cookies", JSESSIONID); connection.setRequestProperty("Cookie", "JSESSIONID=" + JSESSIONID); } map.remove("JSESSIONID"); StringBuffer buffer = new StringBuffer(); outputStream = connection.getOutputStream(); Set> entries = map.entrySet(); for (Map.Entry entry : entries) { // 每次都清空buffer,避免写入上次的数据 buffer.delete(0, buffer.length()); buffer.append("------footfoodapplicationrequestnetwork\r\n"); Object value = entry.getValue(); if (!(value instanceof File)) { buffer.append("Content-Disposition: form-data; name=\""); buffer.append(entry.getKey()); buffer.append("\"\r\n\r\n"); buffer.append(entry.getValue()); buffer.append("\r\n"); outputStream.write(buffer.toString().getBytes()); // System.out.println(buffer.toString()); } else { buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n"); buffer.append("Content-Type: " + "zip" + "\r\n\r\n"); // System.out.println(buffer.toString()); outputStream.write(buffer.toString().getBytes()); File file = (File) entry.getValue(); DataInputStream ins = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = ins.read(bufferOut)) != -1) { outputStream.write(bufferOut, 0, bytes); // System.out.print("A"); } // 文件流后面添加换行,否则文件后面的一个参数会丢失 outputStream.write("\r\n".getBytes()); // System.out.println("\r\n"); } } if (entries != null && map.size() > 0) { buffer.delete(0, buffer.length()); buffer.append("------footfoodapplicationrequestnetwork--\r\n"); // System.out.println(buffer.toString()); } outputStream.write(buffer.toString().getBytes()); try { connection.connect(); if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line = ""; while ((line = in.readLine()) != null) { rs += line; } } else { log.error("http状态:" + connection.getResponseCode()); log.error("http消息:" + connection.getResponseMessage()); } String serverCookies = connection.getHeaderField("Set-Cookie"); log.info("serverCookies:" + serverCookies); if (serverCookies != null) { String[] cookies = serverCookies.split(";"); for (String s : cookies) { s = s.trim(); if (s.split("=")[0].equals("JSESSIONID")) { JSESSIONID = s.split("=")[1]; } } } log.info("JSESSIONID:" + JSESSIONID); } catch (Exception e) { System.out.println("发生异常"); log.error(e.getMessage(), e); rs = null; return new ResponseDto(99, e.getMessage()); } log.info("---------接口返回:" + rs + "---------"); responseDto = JSON.parseObject(rs, ResponseDto.class); if (responseDto == null) return new ResponseDto(99, "接口请求发生未知错误"); responseDto.setJSESSIONID(JSESSIONID); return responseDto; } finally { try { outputStream.close(); if (in != null) { in.close(); } } catch (Exception e) { } outputStream = null; if (connection != null) connection.disconnect(); connection = null; } } public static GatewayResponse pushGateway(String url, Map map) throws Exception { log.info("---------接口请求地址:" + url + "----------参数:" + JSON.toJSONString(map) + "---------"); BufferedReader in = null; URL urls = new URL(url); HttpURLConnection connection = null; OutputStream outputStream = null; String rs = ""; GatewayResponse responseDto; try { connection = (HttpURLConnection) urls.openConnection(); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork"); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8"); connection.setRequestProperty("Accept", "*/*"); connection.setRequestProperty("Range", "bytes=" + ""); connection.setConnectTimeout(20000); connection.setReadTimeout(30000); connection.setRequestMethod("POST"); StringBuffer buffer = new StringBuffer(); outputStream = connection.getOutputStream(); Set> entries = map.entrySet(); for (Map.Entry entry : entries) { // 每次都清空buffer,避免写入上次的数据 buffer.delete(0, buffer.length()); buffer.append("------footfoodapplicationrequestnetwork\r\n"); Object value = entry.getValue(); if (!(value instanceof File)) { buffer.append("Content-Disposition: form-data; name=\""); buffer.append(entry.getKey()); buffer.append("\"\r\n\r\n"); buffer.append(entry.getValue()); buffer.append("\r\n"); outputStream.write(buffer.toString().getBytes()); } else { buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n"); buffer.append("Content-Type: " + "zip" + "\r\n\r\n"); outputStream.write(buffer.toString().getBytes()); File file = (File) entry.getValue(); DataInputStream ins = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = ins.read(bufferOut)) != -1) { outputStream.write(bufferOut, 0, bytes); } // 文件流后面添加换行,否则文件后面的一个参数会丢失 outputStream.write("\r\n".getBytes()); } } if (entries != null && map.size() > 0) { buffer.delete(0, buffer.length()); buffer.append("------footfoodapplicationrequestnetwork--\r\n"); } outputStream.write(buffer.toString().getBytes()); try { connection.connect(); if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line = ""; while ((line = in.readLine()) != null) { rs += line; } } else { log.error("http状态:" + connection.getResponseCode()); log.error("http消息:" + connection.getResponseMessage()); } } catch (Exception e) { System.out.println("发生异常"); log.error(e.getMessage(), e); rs = null; return new GatewayResponse(99, e.getMessage()); } log.info("---------接口返回:" + rs + "---------"); responseDto = JSON.parseObject(rs, GatewayResponse.class); if (responseDto == null) return new GatewayResponse(99, "接口请求发生未知错误"); return responseDto; } finally { try { outputStream.close(); if (in != null) { in.close(); } } catch (Exception e) { } outputStream = null; if (connection != null) connection.disconnect(); connection = null; } } }