import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings;
import com.sd.platform.common.enums.EnumResponseCode;
import com.sd.platform.common.model.ResponseModel;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NetHelper {
/**
* 获取当前客户端IP
* @param request
* @return
*/
public static String getIp(HttpServletRequest request){
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if(ip.contains(",")){
String[] ips = ip.split(",");
ip = ips[0];
}
return ip;
}
/**
* 获取主域名
* @param host
* @return
*/
public static String getMainDomain(String host){
String regStr="[0-9a-zA-Z]+((\\.com)|(\\.cn)|(\\.org)|(\\.net)|(\\.edu)|(\\.com.cn)|(\\.xyz)|(\\.xin)|(\\.club)|(\\.shop)|(\\.site)|(\\.wang)" +
"|(\\.top)|(\\.win)|(\\.online)|(\\.tech)|(\\.store)|(\\.bid)|(\\.cc)|(\\.ren)|(\\.lol)|(\\.pro)|(\\.red)|(\\.kim)|(\\.space)|(\\.link)|(\\.click)|(\\.news)|(\\.news)|(\\.ltd)|(\\.website)" +
"|(\\.biz)|(\\.help)|(\\.mom)|(\\.work)|(\\.date)|(\\.loan)|(\\.mobi)|(\\.live)|(\\.studio)|(\\.info)|(\\.pics)|(\\.photo)|(\\.trade)|(\\.vc)|(\\.party)|(\\.game)|(\\.rocks)|(\\.band)" +
"|(\\.gift)|(\\.wiki)|(\\.design)|(\\.software)|(\\.social)|(\\.lawyer)|(\\.engineer)|(\\.org)|(\\.net.cn)|(\\.org.cn)|(\\.gov.cn)|(\\.name)|(\\.tv)|(\\.me)|(\\.asia)|(\\.co)|(\\.press)|(\\.video)|(\\.market)" +
"|(\\.games)|(\\.science)|(\\.中国)|(\\.公司)|(\\.网络)|(\\.pub)" +
"|(\\.la)|(\\.auction)|(\\.email)|(\\.sex)|(\\.sexy)|(\\.one)|(\\.host)|(\\.rent)|(\\.fans)|(\\.cn.com)|(\\.life)|(\\.cool)|(\\.run)" +
"|(\\.gold)|(\\.rip)|(\\.ceo)|(\\.sale)|(\\.hk)|(\\.io)|(\\.gg)|(\\.tm)|(\\.ph)|(\\.com.hk)|(\\.gs)|(\\.us)|(\\.vip))";
Pattern p = Pattern.compile(regStr);
Matcher m = p.matcher(host);
m.find();
host = m.group();
return host;
}
/**
* 获取主机
* @param request
* @return
*/
public static String getHost(HttpServletRequest request) {
return request.getHeader("host");
}
public static JSONObject getRequestParam(HttpServletRequest request){
JSONObject jsonObject = null;
try {
BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr);
jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
/**
* 获取网关转发后真实host地址
* @param request
* @return
*/
public static String getHostForwarded(HttpServletRequest request){
String host = request.getHeader("x-forwarded-host");
return host;
}
/**
* 获取网关转发后真实ip地址
* @param request
* @return
*/
public static String getIPForwarded(HttpServletRequest request){
String ip = request.getHeader("x-forwarded-for");
return ip;
}
/**
* 获取网关转发后真实proto 协议
* @param request
* @return
*/
public static String getProtoForwarded(HttpServletRequest request){
String proto = request.getHeader("x-forwarded-proto");
return proto;
}
/**
* POST JSON
* @param url url
* @param jsonObj 数据
* @return
*/
public static ResponseModel<String> postJson(String url, Object jsonObj){
ResponseModel<String> responseModel = new ResponseModel<>();
if(Strings.isNullOrEmpty(url)){
responseModel.setCode(EnumResponseCode.FAILED);
responseModel.setMsg("url为空");
return responseModel;
}
try {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(10000);
requestFactory.setReadTimeout(10000);
RestTemplate restTemplate = new RestTemplate(requestFactory);
//创建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<Object> entity = new HttpEntity<>(jsonObj, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, entity, String.class);
String res = responseEntity.getBody();
responseModel.setData(res);
responseModel.setMsg(String.format("status:%s", responseEntity.getStatusCode()))
}
catch (Exception ex){
ex.printStackTrace();
responseModel.setData(ex.getMessage());
responseModel.setMsg("http请求出错");
responseModel.setCode(EnumResponseCode.FAILED);
}
return responseModel;
}
}