最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法

 更新時(shí)間:2023年10月10日 14:21:02   作者:旺崽劉奶  
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過(guò)Java程序獲取IP地址對(duì)應(yīng)的城市,需要借助第三方的IP地址庫(kù),下面就來(lái)介紹一下,感興趣的可以了解一下

IP獲取歸屬地

1.通過(guò)地址庫(kù)獲取

如果使用API接口獲取,可能會(huì)出現(xiàn)服務(wù)掛了,或者服務(wù)地址不提供服務(wù)了等問(wèn)題。而采用本地地址庫(kù)就沒(méi)有這些問(wèn)題。

本文采用離線IP地址定位庫(kù) Ip2region,Ip2region是一個(gè)離線IP地址定位庫(kù),微秒的查詢時(shí)間:

實(shí)現(xiàn)步驟:

訪問(wèn)官網(wǎng)github地址:https://github.com/lionsoul2014/ip2region

 找到data目錄下的:ip2region.xdb文件下載下來(lái)

 把ip2region.xdb文件放在resources目錄下

在模塊中引入maven依賴

        <dependency>
			<groupId>org.lionsoul</groupId>
			<artifactId>ip2region</artifactId>
			<version>2.6.5</version>
		</dependency>

獲取歸屬地:

private Searcher searcher;
@Override
    public String getIpAddress(String ip){
        if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) {
            return "|||局域網(wǎng)ip";
        }
        if (searcher == null) {
            try {
                File file = ResourceUtils.getFile("classpath:db/data_ip2region.xdb");
                String dbPath = file.getPath();
                searcher = Searcher.newWithFileOnly(dbPath);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String region = null;
        String errorMessage = null;
        try {
            region = searcher.search(ip);
        } catch (Exception e) {
            errorMessage = e.getMessage();
            if (errorMessage != null && errorMessage.length() > 256) {
                errorMessage = errorMessage.substring(0, 256);
            }
            e.printStackTrace();
        }
        // 輸出 region
        System.out.println(region);
        return region;
    }
 

這里Searcher引用的是倉(cāng)庫(kù)里面的檢索方法,到這里就完成了可以獲取到ip對(duì)應(yīng)的歸屬地。

調(diào)用方法后運(yùn)行結(jié)果如下

注意?。。。?本地是沒(méi)問(wèn)題的 如果打成jar包放在linux服務(wù)器上會(huì)讀取不到

解決辦法:     

    public String getIpCity(String ip) {
        if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) {
            return "|||局域網(wǎng)ip";
        }
        if (searcher == null) {
            try {
                //本地環(huán)境需要加上 classpath:
//                File file = ResourceUtils.getFile("db/data_ip2region.xdb");
//                String dbPath = file.getPath();
//                searcher = Searcher.newWithFileOnly(dbPath);
                   //這里通過(guò)流獲取 解決jar包無(wú)法讀取文件問(wèn)題
                ResponseEntity<byte[]> test = test("db/data_ip2region.xdb");
                searcher = Searcher.newWithBuffer(test.getBody());
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String region = null;
        String errorMessage = null;
        try {
            region = searcher.search(ip);
        } catch (Exception e) {
            errorMessage = e.getMessage();
            if (errorMessage != null && errorMessage.length() > 256) {
                errorMessage = errorMessage.substring(0, 256);
            }
            e.printStackTrace();
        }
        // 輸出 region
        return region;
    }
    public static ResponseEntity<byte[]> test(String templateName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(templateName);
        String filename = classPathResource.getFilename();
        @Cleanup InputStream inputStream = classPathResource.getInputStream();
        byte[] bytes = FileCopyUtils.copyToByteArray(inputStream);
        String fileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");// 為了解決中文名稱亂碼問(wèn)題
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", fileName);
        return new ResponseEntity<>(bytes, headers, HttpStatus.CREATED);
    }

至于什么是Ip2region 官網(wǎng)上面有介紹這里就不多介紹了

到此這篇關(guān)于JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)JAVA ip地址獲取歸屬地內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot集成SAP的過(guò)程及本地IDEA啟動(dòng)和Windows服務(wù)器部署

    SpringBoot集成SAP的過(guò)程及本地IDEA啟動(dòng)和Windows服務(wù)器部署

    本文給大家介紹SpringBoot集成SAP的過(guò)程及本地IDEA啟動(dòng)和Windows服務(wù)器部署的相關(guān)知識(shí),本文給大家介紹的詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-07-07
  • Java中的clone()和Cloneable接口實(shí)例

    Java中的clone()和Cloneable接口實(shí)例

    這篇文章主要介紹了Java中的clone()和Cloneable接口實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Java8?StreamAPI中的map()方法

    詳解Java8?StreamAPI中的map()方法

    Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Java實(shí)現(xiàn)順序表的操作

    Java實(shí)現(xiàn)順序表的操作

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)順序表的基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java SpringBoot詳解集成以及配置Swagger流程

    Java SpringBoot詳解集成以及配置Swagger流程

    Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)??傮w目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來(lái)更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來(lái)始終保持同步
    2021-10-10
  • 關(guān)于SpringBoot接收json格式的Demo案例

    關(guān)于SpringBoot接收json格式的Demo案例

    這篇文章主要介紹了關(guān)于SpringBoot接收json格式的Demo案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中final變量使用總結(jié)

    Java中final變量使用總結(jié)

    這篇文章主要介紹了Java中final變量使用總結(jié),final關(guān)鍵字可用于變量聲明,一旦該變量被設(shè)定,就不可以再改變?cè)撟兞康闹?通常final定義的變量為常量,需要的朋友可以參考下
    2015-06-06
  • Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)

    只有理論是不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實(shí)現(xiàn)一個(gè)校園跑腿管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • java進(jìn)階之了解SpringBoot的配置原理

    java進(jìn)階之了解SpringBoot的配置原理

    今天帶大家了解SpringBoot的相關(guān)知識(shí),文中對(duì)SpringBoot的配置原理作了非常詳細(xì)的圖文示例及介紹,需要的朋友可以參考下
    2021-06-06
  • java操作時(shí)間方式基礎(chǔ)教程demo

    java操作時(shí)間方式基礎(chǔ)教程demo

    這篇文章主要為大家介紹了java操作時(shí)間方式demo基礎(chǔ)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評(píng)論

宁化县| 罗平县| 红原县| 阿拉善盟| 永登县| 绥滨县| 舞钢市| 静安区| 鄂州市| 黑山县| 襄汾县| 禄丰县| 南召县| 博客| 岳阳市| 湘乡市| 锡林浩特市| 杭锦后旗| 盐津县| 枞阳县| 通海县| 武定县| 普定县| 麦盖提县| 洛宁县| 辽中县| 乌拉特前旗| 鄢陵县| 蓬溪县| 乐亭县| 新巴尔虎左旗| 新兴县| 大姚县| 封丘县| 深水埗区| 万年县| 钟祥市| 稻城县| 竹溪县| 邵阳市| 名山县|