前端通过获取广域网ip然后根据ip得到所在的城市



转载:http://www.2cto.com/kf/201507/425845.html


向原作者致敬,转载只是给自己留一个笔记,没有什么其他的商业用途,如有问题请联系本人删除即可。

亲测代码需要细节调整,是可以运行的,最后得到的是中文的utf-8编码,最后需要我们得到city字段后然后在通过

 URLDecoder.decode("xxxxxx", "UTF-8");解析即可。


<span style= "font-size:18px;" // 获取外网IP
     public static String GetNetIp() {
         URL infoUrl = null ;
         InputStream inStream = null ;
         try {
             // http://iframe.ip138.com/ic.asp
             // infoUrl = new URL(http://city.ip138.com/city0.asp);
             infoUrl = new URL(http: //ip38.com);
             URLConnection connection = infoUrl.openConnection();
             HttpURLConnection httpConnection = (HttpURLConnection) connection;
             int responseCode = httpConnection.getResponseCode();
             if (responseCode == HttpURLConnection.HTTP_OK) {
                 inStream = httpConnection.getInputStream();
                 BufferedReader reader = new BufferedReader(
                         new InputStreamReader(inStream, utf- 8 ));
                 StringBuilder strber = new StringBuilder();
                 String line = null ;
                 while ((line = reader.readLine()) != null )
                     strber.append(line +
);
                 inStream.close();
                 // 从反馈的结果中提取出IP地址
                 // int start = strber.indexOf([);
                 // Log.d(zph,  + start);
                 // int end = strber.indexOf(], start + 1);
                 // Log.d(zph,  + end);
                 line = strber.substring( 378 , 395 );
                 line.replaceAll( , );
                 return line;
             }
         } catch (MalformedURLException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         }
         return null ;
     }</span>

另有一个获取外网IP的高端方法

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public static String GetNetIp()
{
String IP = ;
try
{
String address = http: //ip.taobao.com/service/getIpInfo2.php?ip=myip;
URL url = new URL(address);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setUseCaches( false );
 
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK)
{
InputStream in = connection.getInputStream();
 
// 将流转化为字符串
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
 
String tmpString = ;
StringBuilder retJSON = new StringBuilder();
while ((tmpString = reader.readLine()) != null )
{
retJSON.append(tmpString +
);
}
 
JSONObject jsonObject = new JSONObject(retJSON.toString());
String code = jsonObject.getString(code);
if (code.equals( 0 ))
{
JSONObject data = jsonObject.getJSONObject(data);
IP = data.getString(ip) + ( + data.getString(country)
+ data.getString(area) + 区
+ data.getString(region) + data.getString(city)
+ data.getString(isp) + );
 
Log.e(提示, 您的IP地址是: + IP);
}
else
{
IP = ;
Log.e(提示, IP接口异常,无法获取IP地址!);
}
}
else
{
IP = ;
Log.e(提示, 网络连接异常,无法获取IP地址!);
}
}
catch (Exception e)
{
IP = ;
Log.e(提示, 获取IP地址时出现异常,异常信息是: + e.toString());
}
return IP;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值