【java】 java獲取IP地址(淘寶IP庫接口形式)

本方法利用淘寶IP地址庫實現,簡單易用,不需讀取文件,隨意隨用

工具類下載地址如下:

http://download.csdn.net/detail/yjqyyjw/9477715

工具類+測試方法源碼如下:

package com.gfan.yyq.yyqs.utils;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONObject;

public class AddressUtils {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		AddressUtils addressUtils = new AddressUtils();

		String ip = "118.213.176.78";

		String address = "";

		try {

			address = addressUtils.getAddress("ip=" + ip, "utf-8");

		} catch (Exception e) {

			e.printStackTrace();
		}

		System.out.println(address);

	}

	/**
	 * 獲取地址
	 * 
	 * @param params
	 * @param encoding
	 * @return
	 * @throws Exception
	 */
	public String getAddress(String params, String encoding) throws Exception {

		String path = "http://ip.taobao.com/service/getIpInfo.php";

		String returnStr = this.getRs(path, params, encoding);

		JSONObject json = null;

		if (returnStr != null) {

			json = new JSONObject(returnStr);

			if ("0".equals(json.get("code").toString())) {

				StringBuffer buffer = new StringBuffer();

				// buffer.append(decodeUnicode(json.optJSONObject("data").getString("country")));//國家

				// buffer.append(decodeUnicode(json.optJSONObject("data").getString("area")));//地區

				buffer.append(decodeUnicode(json.optJSONObject("data")
						.getString("region")));// 省份

				buffer.append(decodeUnicode(json.optJSONObject("data")
						.getString("city")));// 市區

				buffer.append(decodeUnicode(json.optJSONObject("data")
						.getString("county")));// 地區

				buffer.append(decodeUnicode(json.optJSONObject("data")
						.getString("isp")));// ISP公司

				System.out.println(buffer.toString());

				return buffer.toString();

			} else {

				return "獲取地址失敗�?";

			}

		}

		return null;

	}

	/**
	 * 從url獲取結果
	 * 
	 * @param path
	 * @param params
	 * @param encoding
	 * @return
	 */
	public String getRs(String path, String params, String encoding) {

		URL url = null;

		HttpURLConnection connection = null;

		try {

			url = new URL(path);

			connection = (HttpURLConnection) url.openConnection();// 新建連接實例

			connection.setConnectTimeout(2000);// 設置連接超時時間,單位毫S?

			connection.setReadTimeout(2000);// 設置讀取數據超時時間,單位毫S?

			connection.setDoInput(true);// 是否打開輸出S? true|false

			connection.setDoOutput(true);// 是否打開輸入流true|false

			connection.setRequestMethod("POST");// 提交方法POST|GET

			connection.setUseCaches(false);// 是否緩存true|false

			connection.connect();// 打開連接端口

			DataOutputStream out = new DataOutputStream(
					connection.getOutputStream());

			out.writeBytes(params);

			out.flush();

			out.close();

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					connection.getInputStream(), encoding));

			StringBuffer buffer = new StringBuffer();

			String line = "";

			while ((line = reader.readLine()) != null) {

				buffer.append(line);

			}

			reader.close();

			return buffer.toString();

		} catch (Exception e) {

			e.printStackTrace();

		} finally {

			connection.disconnect();// 關閉連接

		}

		return null;
	}

	/**
	 * 字符轉碼
	 * 
	 * @param theString
	 * @return
	 */
	public static String decodeUnicode(String theString) {

		char aChar;

		int len = theString.length();

		StringBuffer buffer = new StringBuffer(len);

		for (int i = 0; i < len;) {

			aChar = theString.charAt(i++);

			if (aChar == '\\') {

				aChar = theString.charAt(i++);

				if (aChar == 'u') {

					int val = 0;

					for (int j = 0; j < 4; j++) {

						aChar = theString.charAt(i++);

						switch (aChar) {

						case '0':

						case '1':

						case '2':

						case '3':

						case '4':

						case '5':

						case '6':

						case '7':

						case '8':

						case '9':

							val = (val << 4) + aChar - '0';

							break;

						case 'a':

						case 'b':

						case 'c':

						case 'd':

						case 'e':

						case 'f':

							val = (val << 4) + 10 + aChar - 'a';

							break;

						case 'A':

						case 'B':

						case 'C':

						case 'D':

						case 'E':

						case 'F':

							val = (val << 4) + 10 + aChar - 'A';

							break;

						default:

							throw new IllegalArgumentException(

							"Malformed      encoding.");
						}

					}

					buffer.append((char) val);

				} else {

					if (aChar == 't') {

						aChar = '\t';
					}

					if (aChar == 'r') {

						aChar = '\r';
					}

					if (aChar == 'n') {

						aChar = '\n';
					}

					if (aChar == 'f') {

						aChar = '\f';

					}

					buffer.append(aChar);
				}

			} else {

				buffer.append(aChar);

			}

		}

		return buffer.toString();

	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章