JAvaはipアドレスから都市地域情報を取得する
8742 ワード
JAvaはipアドレスから都市地域情報を取得する
ここでは2つの公開インタフェースを提供しています.1つはアリで、1つは新浪です.http://ip.taobao.com/service/getIpInfo.php?ip=123.139.94.139 http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42次はコードをつけます.ここではspringbootが持っているRestTemplateを使っています.皆さんが使っていなければHttpURLConnectionを使ってもいいです.ケースは、ブロックでipを取得し、アドレスをクエリーすることです.イントラネットテストでは、イントラネットipを取得し、イントラネットを通じてアクセスし、あなたのパブリックネット出口ipを取得したり、ipを直接書いたりすることができます.
アリは結果パッケージのvoを返し,get,setメソッドを省き,他の属性を返しjsonに従って自分で拡張する必要がある.
新浪は結果パッケージのvoを返し,get,setメソッドを省き,他の属性を返しjsonに従って自分で拡張する必要がある.
に注目
問題がある場合は、以下のコメントまたはグループディスカッション
ここでは2つの公開インタフェースを提供しています.1つはアリで、1つは新浪です.http://ip.taobao.com/service/getIpInfo.php?ip=123.139.94.139 http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42次はコードをつけます.ここではspringbootが持っているRestTemplateを使っています.皆さんが使っていなければHttpURLConnectionを使ってもいいです.ケースは、ブロックでipを取得し、アドレスをクエリーすることです.イントラネットテストでは、イントラネットipを取得し、イントラネットを通じてアクセスし、あなたのパブリックネット出口ipを取得したり、ipを直接書いたりすることができます.
@SpringBootApplication
public class LgmallRestApplication {
@Autowired
private RestTemplateBuilder builder;
@Bean
public RestTemplate restTemplate() {
return builder.build();
}
public static void main(String[] args) {
SpringApplication.run(LgmallRestApplication.class, args);
}
}
/**
* @Author: nelson
* @Description:
* @Date: created in 2018/03/31/16:49
*/
public class BrowseItemInterceptor implements HandlerInterceptor {
@Autowired
private RestTemplate restTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
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.getRemoteAddr();
}
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
// ip , ip ip
if( ip.indexOf(",")!=-1 ){
ip = ip.split(",")[0];
}
}
//
String sina = restTemplate.getForObject("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip={ip}", String.class,ip);
SinaIpVo sinaIpVo = new Gson().fromJson(sina, SinaIpVo.class);
if(sinaIpVo.getRet()!=-1){
System.out.println(sinaIpVo.getProvince());
System.out.println(sinaIpVo.getCity());
}else{
String object = restTemplate.getForObject("http://ip.taobao.com/service/getIpInfo.php?ip={ip}", String.class,ip);
IpVo ipVo = new Gson().fromJson(object, IpVo.class);
// XX
if(ipVo.getCode()==0 && !ipVo.getAddress().getRegion().equals("XX")){
System.out.println(ipVo.getAddress().getRegion());
System.out.println(ipVo.getAddress().getCity());
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
アリは結果パッケージのvoを返し,get,setメソッドを省き,他の属性を返しjsonに従って自分で拡張する必要がある.
/**
* @Author: nelson
* @Description: get city by ip
* @Date: created in 2018/03/31/17:40
*/
public class IpVo implements Serializable{
private Integer code;
private Address address;
public class Address implements Serializable{
private String ip;
private String region;
private String city;
}
}
新浪は結果パッケージのvoを返し,get,setメソッドを省き,他の属性を返しjsonに従って自分で拡張する必要がある.
/**
* @Author: nelson
* @Description: get city by ip
* @Date: created in 2018/03/31/17:40
*/
public class SinaIpVo implements Serializable{
private Integer ret;
private String province;
private String city;
}
に注目
問題がある場合は、以下のコメントまたはグループディスカッション
200909980
下の微信の公衆番号に注目して、直ちに各種の技術の乾物を得ることができて、もしあなたが推薦したい招待状があれば、私たちに連絡することができます.