package com.ycl.api.HK; import com.ycl.platform.domain.result.OSDResult; import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.StringReader; import java.net.URI; import java.net.URISyntaxException; import java.time.OffsetDateTime; import java.util.Date; @Slf4j public class HKApi { public static OSDResult getOsdByIP(String ip, String userName, String password) { OSDResult osdResult = new OSDResult(); CloseableHttpClient httpClient = HttpClients.createDefault(); String hostUrl = "http://" + ip; try { //获取OSD HttpResponse OSDResponse = getHttpResponse(httpClient, hostUrl + ApiConstants.HK_OSD_PATH, userName, password); String OSDString = EntityUtils.toString(OSDResponse.getEntity(), "utf-8"); //解析xml parseXMl(OSDString, "TextOverlay", "displayText", osdResult, null); //获取Time HttpResponse TimeResponse = getHttpResponse(httpClient, hostUrl + ApiConstants.HK_OSD_TIME, userName, password); Date date = new Date(); String timeString = EntityUtils.toString(TimeResponse.getEntity(), "utf-8"); //解析xml parseXMl(timeString, "Time", "localTime", osdResult, date); } catch (Exception e) { return null; } return osdResult; } private static void parseXMl(String OSDString, String tagName1, String tagName2, OSDResult osdResult, Date date) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(OSDString))); document.getDocumentElement().normalize(); NodeList nodeList = document.getElementsByTagName(tagName1); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE && "TextOverlay".equals(tagName1)) { Element element = (Element) node; String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); // log.info("TEXT : " + textContent); if (i == 0) { osdResult.setOSD1(textContent); } else if (i == 1) { osdResult.setOSD2(textContent); } else if (i == 2) { osdResult.setOSD3(textContent); } else if (i == 3) { osdResult.setName(textContent); } else if (i == 4) { osdResult.setOSD4(textContent); } } else if (node.getNodeType() == Node.ELEMENT_NODE && "Time".equals(tagName1)) { Element element = (Element) node; String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); // log.info("TEXT : " + textContent); osdResult.setCheckTime(date); OffsetDateTime dateTime = OffsetDateTime.parse(textContent); // 将OffsetDateTime转换为Date对象 osdResult.setOsdTime(Date.from(dateTime.toInstant())); } } } private static HttpResponse getHttpResponse(CloseableHttpClient httpClient, String url, String userName, String password) throws URISyntaxException, IOException { CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(new URI(url).getHost(), new URI(url).getPort()), new UsernamePasswordCredentials(userName, password)); HttpGet httpGet = new HttpGet(url); // 设置请求配置 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(1000) .setSocketTimeout(1000) .build(); httpGet.setConfig(requestConfig); // 绑定凭证提供者到HttpClient httpClient = HttpClientBuilder.create() .setDefaultCredentialsProvider(credsProvider) .build(); try { return httpClient.execute(httpGet); } catch (Exception e){ throw new RuntimeException("海康OSD执行失败"); } } }