java调用ip138实现ip地址查询

摘要:
HttpClient不是浏览器,而是客户端HTTP传输类库。HttpClient用于发送和接收HTTP消息。HttpClient模块中使用了两个重要的类:HttpGet和HttpPost。这两个类分别用于提交HTTPGET和HTTPPOST请求。

HttpClient不是一个浏览器,而是一个客户端HTTP传输类库。HttpClient作用是传输和接收HTTP消息。在HttpClient模块中用到了两个重要的类:HttpGet和HttpPost。这两个类分别用来提交HTTPGET和HTTPPOST请求。

接下来我们将使用以上的理论作为基础,然后进行一次连接http://www.ip138.com/ips138.asp查询ip所在地的实践:

首先我们要下的jar包:

httpclient-4.2.jar
httpclient-cache-4.2.jar
httpcore-4.2.jar
httpmime-4.2.jar
commons-logging-1.1.jar

我的查询ip的源码如下:

package com.java;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;

public class iptest {


	public static String ip2addr(String ip) throws Exception {
		
		DefaultHttpClient httpclient = new DefaultHttpClient();
		String html = "";

		try {
			HttpGet httpget = null;
			//创建HttpGet对象
			httpget = new HttpGet("http://www.ip138.com/ips138.asp?ip=" + ip + "&action=2");
			//使用execute方法发送HTTPGET请求,并返回HttpResponse对象
			HttpResponse response = httpclient.execute(httpget);
			//使用getEntity方法获得返回结果
			HttpEntity entity = response.getEntity();
			//读取response响应内容
			html = EntityUtils.toString(entity,"GB2312");
			//关闭底层流
			EntityUtils.consume(entity);
		} catch (IOException e) {
			throw e;
		} finally {
			httpclient.getConnectionManager().shutdown();
		}
        /**
         * 利用Parser解析HTML,将标签<li>下的内容存储到nodeList里,并获取第一个<li>下的内容,用split分割后获取最终的结果是 日本
         */
        Parser myParser =Parser.createParser(html, "gb2312");
        NodeFilter filter =new TagNameFilter ("li");
        
        NodeList nodeList =myParser.parse(filter);
        System.out.println(nodeList);
        String result = nodeList.elementAt(0).toPlainTextString();
        System.out.println(result);
        String address = result.split(":")[1];
        
        
		return address;

	}
	
	public static void main(String[] args) {
		try {
			ip2addr("111.111.111.111");
		} catch (Exception e) {
			System.out.println("网络异常");
		}
	}


}

程序执行结果:日本,可见111.111.111.111是小日本的ip。

免责声明:文章转载自《java调用ip138实现ip地址查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Maven工程引入jar包(转)flink 如何实现对watermark 的checkpoint,防止数据复写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深度分析WM_PAINT和WM_ERASEBKGND消息

       做windows开发这么久了,一直以来对WM_PAINT和WM_ERASEBKGND消息总是感觉理解的不准确,每次要自绘一个窗口都因为知其然不知其所以然,偶然发现一篇文章,详细透彻地分了这个两个消息的用途和设计初衷,这篇文章也是我见过最深入也是最准确关于WM_PAINT和WM_ERASEBKGND消息的,文中每一句话都值得咀嚼。先转载如下:...

信步漫谈之OwnCloud—Linux下搭建私有云

一、环境 1)Linux系统:CentOS 7.7.1908 2)owncloud-8.0.16.tar.bz2下载地址:https://owncloud.org/download/older-versions/ 3)VMware11 安装 Linux 虚拟机、Windows7 环境 二、安装LAMP #安装软件包 yum install -y httpd...

Django用Apache和mod_wsgi部署

背景 最近写了一个Django在windows上运行,但是用的vbs命令,导致在后台运行的时候,必须用户登录才可以运行,还有就是登录之后,有其他进程可能被干掉。 Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c D:\xxd\run.bat",vbhide ` bat 内容 C:\Python3...

如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的。 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就用Apache POI官方提供的例子,然后加上一些注解,给大家看一下。本例子的测试代码是基于POI-3.12的。 执行完后,将会生成上图所示的Excel工作...

消息中间件(1)

问题的起源 ​ 在深入了解消息中间件之前,我想先搞清楚为什么会出现消息中间件这么一款产品,换句话说我们需要弄清楚消息中间件到底解决了一个什么问题。 ​ 在互联网的初级阶段,那个时候一方面没有想现在如此多的用户,另一方面也没有太复杂的业务场景,在那个阶段,应用的架构往往是垂直式的,通俗的讲就是在一个工程中解决所有的问题。那么从进程角度来看,在这一阶段中所有的...

定时重启MySQL、定时重启Apache [任务计划]

有时候觉得,服务器运行时间过长,程序上无法释放mysql,造成服务器压力过大。因此,设想一下,不用重新启动服务器的情况下,完成apache和mysql的内存释放。 首先,apache的重新启动。 操作步骤: 开始>>程序>>附件>>管理工具>>任务计划 添加任务计划>>下一步>>apa...