| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- package com.ydtech.utils;
- import com.ydtech.exception.SystemException;
- import lombok.extern.slf4j.Slf4j;
- import okhttp3.*;
- import org.apache.commons.text.StringEscapeUtils;
- import org.slf4j.Logger;
- import java.util.concurrent.Executors;
- import java.util.concurrent.TimeUnit;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * @author gws
- * @description:TODO
- * @date 2022-07-13 09:52
- */
- @Slf4j
- public class HttpXmlUtil {
- // public final static OkHttpClient client = new OkHttpClient.Builder()
- // .connectTimeout(120, TimeUnit.SECONDS)
- // .writeTimeout(120, TimeUnit.SECONDS)
- // .readTimeout(120, TimeUnit.SECONDS)
- // .build();
- private static OkHttpClient client;
- private static OkHttpClient getInstance() {
- if (client == null) {
- synchronized (OkHttpClient.class) {
- if (client == null) {
- client = new OkHttpClient.Builder()
- .connectTimeout(60, TimeUnit.SECONDS)
- .writeTimeout(360, TimeUnit.SECONDS)
- .readTimeout(360, TimeUnit.SECONDS)
- .dispatcher(new Dispatcher(Executors.newFixedThreadPool(20)))
- .retryOnConnectionFailure(true)//设置是否开启连接失败时的重试。
- //addInterceptor(Interceptor interceptor); // 添加拦截器,用于处理请求重试逻辑。
- .build();
- }
- }
- }
- return client;
- }
- /**
- * 发送xml请求到server端
- *
- * @param url xml请求数据地址
- * @param xmlString 发送的xml数据流
- * @return null发送失败,否则返回响应内容
- */
- public static String sendPost(String url, String xmlString) {
- System.out.println("请求参数=" + xmlString);
- System.out.println("请求参数=" + XMLFormat.format(xmlString));
- Response response = null;
- String responseString = null;
- try {
- OkHttpClient client = new OkHttpClient.Builder()
- .connectTimeout(60, TimeUnit.SECONDS)
- .writeTimeout(60, TimeUnit.SECONDS)
- .readTimeout(60, TimeUnit.SECONDS)
- .build();
- MediaType mediaType = MediaType.parse("text/xml");
- RequestBody body = RequestBody.create(mediaType, xmlString);
- Request request = new Request.Builder()
- .url(url)
- .post(body)
- .addHeader("Content-Type", "text/xml")
- .addHeader("cache-control", "no-cache")
- .build();
- response = client.newCall(request).execute();
- if (response.isSuccessful()) {
- responseString = response.body().string();
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- response.close();
- }
- System.out.println("返回参数=" + responseString);
- String[] patterns = new String[]{
- // This will remove empty elements that look like <ElementName/>
- "\\s*<\\w+/>",
- // This will remove empty elements that look like <ElementName></ElementName>
- "\\s*<\\w+></\\w+>",
- // This will remove empty elements that look like
- // <ElementName>
- // </ElementName>
- "\\s*<\\w+>\n*\\s*</\\w+>"
- };
- for (String pattern : patterns) {
- Matcher matcher = Pattern.compile(pattern).matcher(responseString);
- responseString = matcher.replaceAll("");
- }
- System.out.println("返回参数==" + responseString);
- return responseString;
- }
- /**
- * 发送xml请求到server端 最新
- *
- * @param url xml请求数据地址
- * @param xmlString 发送的xml数据流
- * @return
- */
- public static String sendXmlPostReq(String url, String xmlString, Logger log, String textHead) {
- if (null != log) {
- log.debug(textHead + "XML请求url:{},\n请求参数:{}", url, xmlString);
- }
- String responseString = null;
- Response response = null;
- try {
- MediaType mediaType = MediaType.parse("text/xml");
- RequestBody reqBody = RequestBody.create(mediaType, xmlString);
- Request request = new Request.Builder()
- .url(url)
- .post(reqBody)
- .addHeader("Content-Type", "text/xml")
- .addHeader("cache-control", "no-cache")
- // .addHeader("Connection", "close")
- .build();
- response = getInstance().newCall(request).execute();
- if (response.isSuccessful()) {
- responseString = response.body().string();
- }
- } catch (Exception e) {
- log.error(textHead + "请求异常:" + e.getMessage() + ",异常信息:" + e);
- e.printStackTrace();
- throw new SystemException("远程接口请求失败,请联系管理员。");
- } finally {
- if (null != log) {
- textHead = StringUtils.toString(textHead, "123456789");
- }
- url = StringUtils.toString(url, "");
- String responseStringMsg = StringEscapeUtils.unescapeXml(responseString);
- log.debug(textHead + "XML返回url:{},\n响应参数:{}", url, responseStringMsg);
- if (StringUtils.isEmpty(responseString)) {
- Headers headers = response.headers();
- for (int i = 0, size = headers.size(); i < size; i++) {
- log.error("响应空时headers:" + headers.name(i) + ": " + headers.value(i));
- }
- }
- response.close();
- }
- return responseString;
- }
- /**
- * 发送xml请求到server端 最新
- *
- * @param url xml请求数据地址
- * @param xmlString 发送的xml数据流
- * @return
- */
- public static String sendXmlPostReqBase(String url, String xmlString) {
- xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tns=\"http://newWS.front.app.echannel.ebiz.alltrust.com/\"><soapenv:Body><tns:queryVehicleTypesService><request><authorityData><userName>tianqin</userName><password>tianqin2023@</password></authorityData><searchKeyword>LVHRW185</searchKeyword><engineNo>1051694</engineNo><vid>LVHRW1859J5040098</vid><dptCde>14B8</dptCde><prono>0326</prono><motorTypeCode>11</motorTypeCode><cFstRegYm>20171021</cFstRegYm></request></tns:queryVehicleTypesService></soapenv:Body>\n" +
- "</soapenv:Envelope>";
- String responseString = null;
- Response response = null;
- try {
- MediaType mediaType = MediaType.parse("text/xml");
- RequestBody reqBody = RequestBody.create(mediaType, xmlString);
- Request request = new Request.Builder()
- .url(url)
- .post(reqBody)
- .addHeader("Content-Type", "text/xml")
- .addHeader("cache-control", "no-cache")
- .build();
- response = getInstance().newCall(request).execute();
- if (response != null) {
- if (response.isSuccessful()) {
- responseString = response.body().string();
- }
- } else {
- log.error("请求返回null");
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new SystemException("远程接口请求失败,请联系管理员。");
- } finally {
- if (StringUtils.isEmpty(responseString)) {
- Headers headers = response.headers();
- for (int i = 0, size = headers.size(); i < size; i++) {
- System.err.println("headers:" + headers.name(i) + ": " + headers.value(i));
- }
- } else {
- System.err.println("通过");
- }
- response.close();
- }
- return responseString;
- }
- }
|