From 010ef2a907e66efd4702443c06cdd18f8a7ffa5b Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 30 十月 2024 14:08:53 +0800
Subject: [PATCH] IP归属地查询接口集成

---
 src/main/java/com/yeshi/buwan/util/IPUtil.java |  430 +++++++++++++++++++----------------------------------
 1 files changed, 158 insertions(+), 272 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/util/IPUtil.java b/src/main/java/com/yeshi/buwan/util/IPUtil.java
index 14bc15f..6ea66e0 100644
--- a/src/main/java/com/yeshi/buwan/util/IPUtil.java
+++ b/src/main/java/com/yeshi/buwan/util/IPUtil.java
@@ -1,304 +1,190 @@
 package com.yeshi.buwan.util;
 
+import com.google.gson.Gson;
+import com.show.api.ShowApiRequest;
+import net.sf.json.JSONObject;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.lionsoul.ip2region.xdb.Searcher;
+import org.yeshi.utils.HttpUtil;
+
+import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedInputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.methods.GetMethod;
-
-import net.sf.json.JSONObject;
-
 public class IPUtil {
-	// http://verx.daili666.com/ip/?tid=558287898012218&num=1&operator=2
-	public static void changeIp() {
-		System.getProperties().setProperty("proxySet", "true"); // 濡傛灉涓嶈缃紝鍙浠g悊IP鍜屼唬鐞嗙鍙f纭�,姝ら」涓嶈缃篃鍙互
-		System.getProperties().setProperty("http.proxyHost", "213.85.92.10");
-		System.getProperties().setProperty("http.proxyPort", "80");
-		LogUtil.i(getHtml("http://www.ip138.com/ip2city.asp")); // 鍒ゆ柇浠g悊鏄惁璁剧疆鎴愬姛
-	}
+    private static Searcher searcher;
 
-	private static String getHtml(String address) {
-		StringBuffer html = new StringBuffer();
-		String result = null;
-		try {
-			URL url = new URL(address);
-			URLConnection conn = url.openConnection();
-			conn.setRequestProperty("User-Agent",
-					"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)");
-			BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
-			try {
-				String inputLine;
-				byte[] buf = new byte[4096];
-				int bytesRead = 0;
-				while (bytesRead >= 0) {
-					inputLine = new String(buf, 0, bytesRead, "ISO-8859-1");
-					html.append(inputLine);
-					bytesRead = in.read(buf);
-					inputLine = null;
-				}
-				buf = null;
-			} finally {
-				in.close();
-				conn = null;
-				url = null;
-			}
-			result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase();
-		} catch (Exception e) {
-			e.printStackTrace();
-			return null;
-		}
-		html = null;
-		return result;
-	}
+    static {
+        try {
+            URL url = IPUtil.class.getClassLoader().getResource("ip2region.xdb");
+            String path = new File(url.toURI()).getAbsolutePath();
+            byte[] vIndex = Searcher.loadVectorIndexFromFile(path);
+            searcher = Searcher.newWithVectorIndex(path, vIndex);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
-	// 娌℃湁鎵惧埌浠g悊IP
-	// 閲嶅簡
-	public static String getDaiLiIP(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod(
+    // http://verx.daili666.com/ip/?tid=558287898012218&num=1&operator=2
+    public static void changeIp() {
+        System.getProperties().setProperty("proxySet", "true"); // 濡傛灉涓嶈缃紝鍙浠g悊IP鍜屼唬鐞嗙鍙f纭�,姝ら」涓嶈缃篃鍙互
+        System.getProperties().setProperty("http.proxyHost", "213.85.92.10");
+        System.getProperties().setProperty("http.proxyPort", "80");
+        LogUtil.i(getHtml("http://www.ip138.com/ip2city.asp")); // 鍒ゆ柇浠g悊鏄惁璁剧疆鎴愬姛
+    }
 
-					"http://verx.daili666.com/ip/?tid=559511877530791&num=1&operator=2&filter=on&area="
-							+ URLEncoder.encode(area, "UTF-8") + "");
-		} catch (UnsupportedEncodingException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		}
+    private static String getHtml(String address) {
+        StringBuffer html = new StringBuffer();
+        String result = null;
+        try {
+            URL url = new URL(address);
+            URLConnection conn = url.openConnection();
+            conn.setRequestProperty("User-Agent",
+                    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)");
+            BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
+            try {
+                String inputLine;
+                byte[] buf = new byte[4096];
+                int bytesRead = 0;
+                while (bytesRead >= 0) {
+                    inputLine = new String(buf, 0, bytesRead, "ISO-8859-1");
+                    html.append(inputLine);
+                    bytesRead = in.read(buf);
+                    inputLine = null;
+                }
+                buf = null;
+            } finally {
+                in.close();
+                conn = null;
+                url = null;
+            }
+            result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        html = null;
+        return result;
+    }
 
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			sendNoticeEmail(result);
-			LogUtil.i(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+    private static void sendNoticeEmail(String get) {
+        if (get != null && get.contains("璁㈠崟鍓╀綑鏁伴噺涓嶈冻")) {
+            /*
+             * MailSenderUtil.sendEmail("1101184511@qq.com", "绯荤粺鎻愮ず:IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻",
+             * "IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻锛岃鐧诲綍鍒颁唬鐞�666鍏呭��");
+             */
+        }
+    }
 
-	public static String getDaiLiIP1(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod(
+    public static String getRemotIP(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();
+        }
+        return ip;
+    }
 
-					"http://verx.daili666.com/ip/?tid=559186334744019&num=1&area=" + URLEncoder.encode(area, "UTF-8")
-							+ "");
-		} catch (UnsupportedEncodingException e1) {
-			e1.printStackTrace();
-		}
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			sendNoticeEmail(result);
-			LogUtil.i(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
 
-	// 鎴愰兘
+    /**
+     * 鑾峰彇杩滅▼绔彛
+     *
+     * @param request
+     * @return
+     */
+    public static int getRemotePort(HttpServletRequest request) {
+        return request.getRemotePort();
+    }
 
-	public static String getDaiLiIP2(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod("http://verx.daili666.com/ip/?tid=558287898012218&num=1&filter=on&area="
-					+ URLEncoder.encode(area, "UTF-8"));// &area="+
-														// URLEncoder.encode(area,
-														// "UTF-8") + "
-		} catch (Exception e1) {
-			e1.printStackTrace();
-		}
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			sendNoticeEmail(result);
-			LogUtil.i(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+    public static IPInfo getLocalIPInfo(String ip) throws Exception {
+        String appcode = "46789780da4f4d92885c3d39b97e3ba9";
+        // 閫氳繃闃块噷浜戠殑鎺ュ彛鑾峰彇IP淇℃伅
+        String url = "https://zjip.market.alicloudapi.com/lifeservice/QueryIpAddr/query?ip=" + URLEncoder.encode(ip, "UTF-8");
+        // 缃戠粶璇锋眰
+        HttpClient client = new HttpClient();
+        client.getHttpConnectionManager().getParams().setConnectionTimeout(2000);
+        GetMethod method = new GetMethod(url);
+        method.setRequestHeader("Authorization",  "APPCODE " + appcode);
+        client.executeMethod(method);
+        String result = method.getResponseBodyAsString();
+        System.out.println(result);
+        JSONObject data = JSONObject.fromObject(result);
+        if (data.optInt("error_code") == 0) {
+            data = data.optJSONObject("result");
+            IPInfo ipInfo = new IPInfo(data.optString("country"), data.optString("province"), data.optString("city"));
+            return ipInfo;
+        } else {
+            throw new Exception(data.optString("reason"));
+        }
+    }
 
-	public static String getDaiLiIP3(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod("http://verx.daili666.com/ip/?tid=557489926231876&num=1&filter=on&area="
-					+ URLEncoder.encode(area, "UTF-8") + "");
-		} catch (UnsupportedEncodingException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		}
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			sendNoticeEmail(result);
-			LogUtil.i(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+    public static class IPInfo {
+        private String province;
+        private String city;
+        private String country;
 
-	public static String getDaiLiIP4(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod("http://verx.daili666.com/ip/?tid=556436495975069&num=1&area="
-					+ URLEncoder.encode(area, "UTF-8") + "");
-		} catch (UnsupportedEncodingException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		}
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			sendNoticeEmail(result);
-			LogUtil.i(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+        public IPInfo(String country, String province, String city) {
+            this.province = province;
+            this.city = city;
+            this.country = country;
+        }
 
-	public static String getDaiLiIP5(String area) {
-		HttpClient client = new HttpClient();
-		GetMethod get = null;
-		try {
-			get = new GetMethod("http://verx.daili666.com/ip/?tid=559418280288916&num=1&filter=on&area="
-					+ URLEncoder.encode(area, "UTF-8") + "");
+        public String getProvince() {
+            return province;
+        }
 
-		} catch (UnsupportedEncodingException e1) {
-			e1.printStackTrace();
-		}
-		try {
-			client.executeMethod(get);
-			String result = get.getResponseBodyAsString();
-			LogUtil.i(result);
-			sendNoticeEmail(result);
-			if (!result.contains("娌℃湁鎵惧埌"))
-				return result;
-			else
-				return null;
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+        public void setProvince(String province) {
+            this.province = province;
+        }
 
-	private static void sendNoticeEmail(String get) {
-		if (get != null && get.contains("璁㈠崟鍓╀綑鏁伴噺涓嶈冻")) {
-			/*
-			 * MailSenderUtil.sendEmail("1101184511@qq.com", "绯荤粺鎻愮ず:IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻",
-			 * "IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻锛岃鐧诲綍鍒颁唬鐞�666鍏呭��");
-			 */
-		}
-	}
+        public String getCity() {
+            return city;
+        }
 
-	public static String getRemotIP(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();
-		}
-		return ip;
-	}
+        public void setCity(String city) {
+            this.city = city;
+        }
 
-	public static Map<String, String> getIPInfo(String ip) {
-		Map<String, String> map = new HashMap<String, String>();
-		HttpClient client = new HttpClient();
-		GetMethod method = new GetMethod("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip);
-		try {
-			client.executeMethod(method);
-			String result = method.getResponseBodyAsString();
-			JSONObject object = JSONObject.fromObject(result);
-			if (object.optInt("code") == 0) {
-				map.put("city", object.optJSONObject("data").optString("city"));
-				map.put("country", object.optJSONObject("data").optString("country"));
-				return map;
-			}
+        public String getCountry() {
+            return country;
+        }
 
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return map;
-	}
+        public void setCountry(String country) {
+            this.country = country;
+        }
+    }
 
-	public static String getIPContry(String ip) {
-		HttpClient client = new HttpClient();
-		GetMethod method = new GetMethod("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip);
-		try {
-			client.executeMethod(method);
-			String result = method.getResponseBodyAsString();
-			JSONObject object = JSONObject.fromObject(result);
-			if (object.optInt("code") == 0) {
-				return object.optJSONObject("data").optString("country");
-			}
+    public static void main(String[] args) {
+        try {
+            IPInfo info = getLocalIPInfo("113.250.254.8");
+            System.out.println(new Gson().toJson(info));
+            info = getLocalIPInfo("193.112.35.168");
+            System.out.println(new Gson().toJson(info));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
-		} catch (HttpException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return "";
-	}
+    }
 
 }

--
Gitblit v1.8.0