java获取远端ip并根据ip得到详细地址信息
来源:互联网 发布:剑三菊花dbm数据 编辑:程序博客网 时间:2024/05/21 09:46
**文章内容是通过他人博客内容改写的,仅供自己后续开发时使用。侵删!**
1.通过HttpServletRequest获取远端IP地址(方法一般写在service里供调用)
引入包:import javax.servlet.http.HttpServletRequestpublic static String getRemoteIp(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 }
2.根据IP地址得到详细地址信息(项目基于grails框架来写的,所以语言采用groovy)
package ***import grails.converters.JSONimport grails.transaction.Transactional@Transactionalclass LoginService { def configService def getAddressByIP(String content, String encodingString) {//content 请求的参数 格式为:name=xxx&pwd=xxx , encodingString 服务器端请求编码。如GBK,UTF-8等 //默认是调用淘宝的接口 String urlStr = "http://ip.taobao.com/service/getIpInfo.php" //根据项目需要写入配置文件 String returnStr = getResult(urlStr, content, encodingString) if (returnStr != null) { // 处理返回的省、市信息 def result = JSON.parse(returnStr) def data = result.data String address = data.region + data.city return address } return null } def getResult(String urlStr, String content, String encodingString) { URL url = null HttpURLConnection connection = null try { url = new URL(urlStr) connection = (HttpURLConnection) url.openConnection()// 新建连接实例 connection.setConnectTimeout(2000)// 设置连接超时时间,单位毫秒 connection.setReadTimeout(3000)// 设置读取数据超时时间,单位毫秒 connection.setDoOutput(true)// 是否打开输出流 connection.setDoInput(true)// 是否打开输入流 connection.setRequestMethod("POST")// 提交方法POST|GET connection.setUseCaches(false)// 是否缓存 connection.connect()// 打开连接端口 DataOutputStream out = new DataOutputStream(connection.getOutputStream())// 打开输出流往对端服务器写数据 out.writeBytes(content) // 写数据,也就是提交你的表单 name=xxx&pwd=xxx out.flush()// 刷新 out.close()// 关闭输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encodingString)) // 往对端写完数据对端服务器返回数据,以BufferedReader流来读取 StringBuffer buffer = new StringBuffer() String len = "" while ((len = reader.readLine()) != null) { buffer.append(len) } reader.close() return buffer.toString() } catch (IOException e) { e.printStackTrace() } finally { if (connection != null) { connection.disconnect()// 关闭连接 } } return null }}
通过淘宝的获取ip位置接口,传入IP为125.118.248.14时,上面返回的信息result打印出来的结果:
[code:0, data:[area:华东, country:中国, isp_id:100017, city:杭州市, isp:电信, ip:125.118.248.14, region_id:330000, county:, area_id:300000, county_id:-1, region:浙江省, country_id:CN, city_id:330100]]
用json处理完后根据需要自己提取所需信息,本人项目中仅用到了region(省)和city(市)
淘宝的接口:http://ip.taobao.com/service/getIpInfo.php?ip=
新浪的接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=
腾讯的接口:http://ip.qq.com/cgi-bin/searchip?searchip=
返回的处理结果均不同:
1.淘宝的接口可直接使用上面的代码编写
2.新浪的接口测试后发现编码为utf-8时乱码,gbk是是中文,但是返回结果也不好用
3.腾讯的接口好像测试发现均被告知系统繁忙,无法提供这个服务。
新浪和淘宝的接口待以后需要时再测试!
阅读全文
0 0
- java获取远端ip并根据ip得到详细地址信息
- java 根据 ip 得到 城市
- 根据IP获取地域信息
- 根据ip获取所在城市信息
- asp根据ip得到地址信息
- PHP 获取IP 并根据IP获取 城市省份等信息
- Java使用qqwry.dat根据IP地质获取城市信息
- JAVA根据IP地址获取详细的地域信息
- java根据ip地址获取详细地域信息
- java根据ip地址获取详细地域信息
- java根据ip地址获取详细地域信息
- JAVA根据IP地址获取详细的地域信息
- JAVA根据IP地址获取详细的地域信息
- JAVA根据IP地址获取详细的地域信息
- java根据ip地址获取详细地域信息
- JAVA根据IP地址获取详细的地域信息
- Java-----根据IP地址获取详细的地域信息
- java根据ip地址获取详细地域信息
- inner.Text嵌入数据
- JQuery操作CheckBox 第二次无法选中的问题
- HDU
- 大数相除求余数
- appium+python 多设备并行执行脚本
- java获取远端ip并根据ip得到详细地址信息
- python windows gbk编码转换
- Java数组递归解九连环并且打印中间步骤
- kafka常见问题汇总
- I2C总线之(一)---概述
- Understanding Git Conceptually新手理解Git (Note)
- 最长回文串模板
- 第一章 1.1 基础编程模型(我们把描述和实现算法所用到的语言特性、软件库和操作系统特性总称为基础编程模型)
- 简明易懂的动态链接库(.dll)和静态链接库(.lib)的优缺点分析