package nccloud.pubift.commen.impl.utils; import com.alibaba.fastjson.JSONObject; import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; public class HttpPostOtherSysImpl implements IHttpPostOtherSys { private static final String USER_ID = "BIP"; private static final String PASSWORD = "BIP@2025bip"; private static final String CLIENT_TYPE = "S"; private static final String EP_ID = ""; private static final String LOGIN_URL = "/GTHINKING/AjaxService/N_MISPRO/100208057.ashx/Login"; @Override public String callMes(String url, JSONObject json) { // String leip = SysParaInitQuery.getParaString(PubEnv.getPk_group(), "LEIP"); String mesip = "http://192.168.29.32"; String baseurl = mesip + url; String cookie = this.getMESToken(mesip); Map headers = new HashMap<>(); headers.put("Set-Cookie", cookie); return doPost(baseurl, headers, json); } private String getMESToken(String leip) { JSONObject jsonObject = new JSONObject(); jsonObject.put("userId", USER_ID); jsonObject.put("password", PASSWORD); jsonObject.put("clientType", CLIENT_TYPE); jsonObject.put("epId", EP_ID); return postCookie(leip + LOGIN_URL, null, jsonObject); } /** * 业务请求post方法 */ private String doPost(String baseurl, Map map, JSONObject json) { BufferedReader reader = null; try { URL url = new URL(baseurl);// 创建连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestMethod("POST"); // 设置请求方式 // 设置接收数据的格式 connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式 if (map != null) { for (String key : map.keySet()) { connection.setRequestProperty(key, map.get(key)); } } connection.connect(); // 一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // UTF-8编码 if (json != null) { out.append(json.toString()); } out.flush(); out.close(); // 读取响应 reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; String res = ""; while ((line = reader.readLine()) != null) { res += line; } reader.close(); return res; } catch (Exception e) { // e.printStackTrace(); throw new RuntimeException(e); } } /** * 获取cookie的请求post */ private String postCookie(String baseurl, Map map, JSONObject json) { BufferedReader reader = null; try { URL url = new URL(baseurl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); if (map != null) { for (String key : map.keySet()) { connection.setRequestProperty(key, map.get(key)); } } connection.connect(); // 写入请求体 OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); if (json != null) { out.append(json.toString()); } out.flush(); out.close(); // 读取响应头中的 Set-Cookie Map> headers = connection.getHeaderFields(); String setCookieHeader = null; for (Map.Entry> entry : headers.entrySet()) { if ("Set-Cookie".equalsIgnoreCase(entry.getKey())) { setCookieHeader = entry.getValue().get(0); // 取第一个 Set-Cookie 头 break; } } if (setCookieHeader != null) { return extractAspxAuth(setCookieHeader); // 返回 ASPXAUTH 的值 } else { return null; } } catch (Exception e) { throw new RuntimeException(e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 提取 .ASPXAUTH 的值 private String extractAspxAuth(String cookieHeader) { String[] cookies = cookieHeader.split("; "); for (String cookie : cookies) { if (cookie.startsWith(".ASPXAUTH=")) { return cookie.substring(".ASPXAUTH=".length()); } } return null; } }