ip转换国家,之前有用taobao的第三方接口
“http://ip.taobao.com/service/getIpInfo.php?ip=”+IP
但是这个接口存在问题,就是一个时间段转换的ip过多的话会出现接口不给访问的问题
这是源码
public static String getCountry(String ip) {
// TODO Auto-generated method stub
String arr = GetAddressByIp(ip);
try {
//因为访问频繁,所以只能加长时间,降低了效率
Thread.sleep(1000*5L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(arr+"==========================================================");
return arr;
}
public static String GetAddressByIp(String IP){
String resout = "";
try{
String str = getJsonContent("http://ip.taobao.com/service/getIpInfo.php?ip="+IP);
System.out.println("getJsonContent:"+str+"===========================");
JSONObject parse = (JSONObject) JSONObject.parse(str);
System.out.println("parse:" + parse.toJSONString() );
JSONObject obj2 = parse.getJSONObject("data");
if (null != obj2) {
resout = obj2.getString("country");
}
}catch(Exception e){
e.printStackTrace();
resout = "获取IP地址异常:"+e.getMessage();
}
return resout;
}
public static String getJsonContent(String urlStr)
{
try
{// 获取HttpURLConnection连接对象
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 设置连接属性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 获取相应码
int respCode = httpConn.getResponseCode();
if (respCode == 200)
{
return ConvertStream2Json(httpConn.getInputStream());
}
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return "";
}
private static String ConvertStream2Json(InputStream inputStream)
{
String jsonStr = "";
// ByteArrayOutputStream相当于内存输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 将输入流转移到内存输出流中
try
{
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)
{
out.write(buffer, 0, len);
}
// 将内存流转换为字符串
jsonStr = new String(out.toByteArray());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonStr;
}
于是找了另外一个第三方接口(亲测可行)
以下是工具类
public static String getAddressByIP(String strIP) {
try {
URL url = new URL("http://freeapi.ipip.net/"+strIP);
URLConnection conn = url.openConnection();
//这是防止程序调用第三方接口出现403的问题
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String line = null;
StringBuffer result = new StringBuffer();
while ((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
String ipAddr = result.toString();
return ipAddr;
} catch (IOException e) {
System.out.println(e.getMessage());
return "读取失败";
}
}
这是我的一个测试
public static void main(String[] args) {
String bString=getAddressByIP("222.128.56.148");
System.out.println(bString);
}
这是运行结果