日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java ip138_判读ip所在地(通过百度ip138的提供的服务) java实现

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ip138_判读ip所在地(通过百度ip138的提供的服务) java实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

任務(wù)需要,希望根據(jù)一組ip地址來獲取其真實(shí)所在地。

忽然想起來之前使用百度的服務(wù)是可以通過ip地址查詢真實(shí)地址的,于是迅速在百度的搜索頁中找到了這個(gè)小工具。發(fā)現(xiàn)百度通過調(diào)用www.ip138.com/這個(gè)網(wǎng)站的服務(wù)來獲取真實(shí)地址。

在輸入欄輸入查詢按鈕,并點(diǎn)擊查詢按鈕,發(fā)現(xiàn)這個(gè)查詢服務(wù)是通過ajax實(shí)現(xiàn)的,請(qǐng)求的地址是?https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=123.123.192.255&co=&resource_id=6006&t=1433922612109&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery110206955700272228569_1433922418817&_=1433922418822

返回的信息數(shù)據(jù)如下:

/**/jQuery110206955700272228569_1433922418817({"status":"0","t":"1433922612109","set_cache_time":"","data":[{"location":"北京市 聯(lián)通", "titlecont":"IP地址查詢", "origip":"123.123.192.255", "origipquery":"123.123.192.255", "showlamp":"1", "showLikeShare":1, "shareImage":1, "ExtendedLocation":"", "OriginQuery":"123.123.192.255", "tplt":"ip", "resourceid":"6006", "fetchkey":"123.123.192.255", "appinfo":"", "role_id":0, "disp_type":0}]});

看到返回的信息,就應(yīng)該發(fā)現(xiàn)一些有用的東西了吧。所以我們可以通過模擬向百度的服務(wù)器發(fā)送請(qǐng)求來獲取我們想要的所在地信息

事實(shí)在之后的嘗試中我發(fā)現(xiàn)url后的參數(shù)列表中有一部分完全用不到,于是我就刪減了部分不影響結(jié)果的參數(shù)

以java語言實(shí)現(xiàn)

獲取返回信息的方法

/*** 通過用戶ip獲取用戶所在地

*@paramuserIp

*@return

*/

publicString getUserLocation(String userIp)

{String url= "http://opendata.baidu.com/api.php?query=" +userIp;

url+= "&co=&resource_id=6006&t=1433920989928&ie=utf8&oe=gbk&format=json";

returnHttpRequest.sendGet(url);

}

HttpReqeuest的Get方法(使用urlConnection) 向指定的url發(fā)送get請(qǐng)求

public staticString sendGet(String url) {

String result= "";

BufferedReader in= null;try{

URL realUrl= newURL(url);//打開和URL之間的連接

URLConnection connection =realUrl.openConnection();//設(shè)置通用的請(qǐng)求屬性

connection.setRequestProperty("accept", "*/*");

connection.setRequestProperty("connection", "Keep-Alive");

connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");//建立實(shí)際的連接

connection.connect();//獲取所有響應(yīng)頭字段

Map> map =connection.getHeaderFields();//遍歷所有的響應(yīng)頭字段

for(String key : map.keySet()) {

System.out.println(key+ "--->" +map.get(key));

}//定義 BufferedReader輸入流來讀取URL的響應(yīng)

in = new BufferedReader(newInputStreamReader(

connection.getInputStream()));

String line;while ((line = in.readLine()) != null) {

result+=line;

}

}catch(Exception e) {

System.out.println("發(fā)送GET請(qǐng)求出現(xiàn)異常!" +e);

e.printStackTrace();

}//使用finally塊來關(guān)閉輸入流

finally{try{if (in != null) {

in.close();

}

}catch(Exception e2) {

e2.printStackTrace();

}

}returnresult;

}

在執(zhí)行g(shù)etUserLocation后返回的就是百度返回的json字符串了,所以也可以用一些json解析的方法來獲取json中的location信息,解析的方式各有不同,不再做過多描述了。

最后需要注意的一點(diǎn),這個(gè)方法本身是基于baidu提供的ip地址獲取服務(wù)接口實(shí)現(xiàn)的,所有當(dāng)百度的服務(wù)接口如果有所修改的話,這個(gè)功能是由失效的可能性的。

總結(jié)

以上是生活随笔為你收集整理的java ip138_判读ip所在地(通过百度ip138的提供的服务) java实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。