【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();

	}

}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值