0
点赞
收藏
分享

微信扫一扫

28.获取客户端的ip

boomwu 2021-09-21 阅读 53
javaJava web

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;
    }
}




举报

相关推荐

0 条评论