【HttpClient学习与实战】2.使用httpclient实现快递查询网站
2016-07-06 15:43
501 查看
上一次我们自己编写了一个数据接口,并且使用httpClient进行了get和post对http信息进行了请求和获取回复。
我们这次去真正的访问一个第三方数据接口,来开发一个实际的应用。
我们要完成的是一个快递查询的网站,淘了很久,发现了一个比较权威且有用的快递物流数据接口:
获取json格式的物流快递信息 http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号
ps:快递公司编码:申通="shentong" EMS="ems" 顺丰="shunfeng" 圆通="yuantong" 中通="zhongtong" 韵达="yunda" 天天="tiantian" 汇通="huitongkuaidi" 全峰="quanfengkuaidi" 德邦="debangwuliu" 宅急送="zhaijisong"
效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/bc197dfbd9455765e286c2f4e1ba5f86)
接下来我们就在上次我们创建的httpTest工程(一个WebProject)里面创建我们的应用。
首先我们编写快递查询的首页,一个jsp页面,我们就拿httpTest工程中默认的index.jsp写:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/e9dc0e731cb0f3f6c9ebeca7a568cc93)
然后创建相应的Servlet进行处理:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/d2414dc033cd6b3484f7472bd57d07ba)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/2430c0bf49768299328eeecdf7fcad2c)
然后查看Web.xml中是否注册该Servlet:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/19da12ee518b4815dbd44aa68c04f84f)
要注意的是,该Servlet中就要做到使用httpClient去请求快递查询的数据接口,然后进行数据解析(解析json这一块这里不再赘述,想要学习的同学可以专门去搜索相关资源学习),最终将快递信息呈现在页面上。
下面是该Servlet的具体实现,我们这里使用的是post请求:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/4b8aca4e4b7de7aefcf89a18b36618ec)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201607/311fdb1e01374a6680d9277ba328ed1f)
至此,我们利用httpClient获取了网络上的第三方数据接口来完成了一个快递查询服务。目前比较火爆的移动互联网中,愈来愈多的微信公众号、微网站和手机App,都采用了第三方数据接口来提供一些常见的数据服务,例如天气查询、手机归属地查询、每日笑话、股票走势等等......学会合理利用网络资源,就会使开发的应用功能更丰富,吸引更多的用户。
彩蛋:
一个包含许多免费数据服务接口的地址集合(天气预报、手机归属地等等...):
http://www.bejson.com/knownjson/webInterface/
转载请注明出处:http://blog.csdn.net/acmman/article/details/51839525
我们这次去真正的访问一个第三方数据接口,来开发一个实际的应用。
我们要完成的是一个快递查询的网站,淘了很久,发现了一个比较权威且有用的快递物流数据接口:
获取json格式的物流快递信息 http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号
ps:快递公司编码:申通="shentong" EMS="ems" 顺丰="shunfeng" 圆通="yuantong" 中通="zhongtong" 韵达="yunda" 天天="tiantian" 汇通="huitongkuaidi" 全峰="quanfengkuaidi" 德邦="debangwuliu" 宅急送="zhaijisong"
效果:
接下来我们就在上次我们创建的httpTest工程(一个WebProject)里面创建我们的应用。
首先我们编写快递查询的首页,一个jsp页面,我们就拿httpTest工程中默认的index.jsp写:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>程序猿快递查询网</title> </head> <body style="color: #FFFFFF;background-color: #000000"> <center><h1>程序猿快递查询网</h1> <form method="post" action="<%=basePath %>KuaiDiQuery"> 要查询的快递公司:<br/> <input type="text" name="type"><br/> 要查询的快递单号:<br/> <input type="text" name="postid"><br/> <input type="submit" value="查询"> </form> </center> </body> </html>页面效果:
然后创建相应的Servlet进行处理:
然后查看Web.xml中是否注册该Servlet:
要注意的是,该Servlet中就要做到使用httpClient去请求快递查询的数据接口,然后进行数据解析(解析json这一块这里不再赘述,想要学习的同学可以专门去搜索相关资源学习),最终将快递信息呈现在页面上。
下面是该Servlet的具体实现,我们这里使用的是post请求:
package kuaidi; import httpcall.HttpClientUtil; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONArray; import org.json.JSONObject; public class KuaiDiQuery extends HttpServlet { private static final Log log=LogFactory.getLog(HttpClientUtil.class); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-type", "text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); String code=request.getParameter("type"); String postid=request.getParameter("postid"); String type=""; if(code.contains("申通")){ type="shentong"; }else if(code.contains("EMS")){ type="ems"; }else if(code.contains("顺丰")){ type="shunfeng"; }else if(code.contains("圆通")){ type="yuantong"; }else if(code.contains("中通")){ type="zhongtong"; }else if(code.contains("韵达")){ type="yunda"; }else if(code.contains("天天")){ type="tiantian"; }else if(code.contains("汇通")){ type="huitongkuaidi"; }else if(code.contains("全峰")){ type="quanfengkuaidi"; }else if(code.contains("德邦")){ type="debangwuliu"; }else if(code.contains("宅急送")){ type="zhaijisong"; }else{ type="null"; } if(!type.equals("null")&&!type.equals("")&&postid!=null&&!postid.equals("")){ out.println("<html><head><title>查询结果</title><head>" + "<body style=\"color: #FFFFFF;background-color: #000000\">" + "<center>您查询的是<font color='red'><b>"+code+"</b></font>的快递<br/>"); String jsonText=postHttp(type,postid); //解析json,获取有用数据 try { JSONObject jsonObject=new JSONObject(jsonText); //array.getJSONObject(0); String ischeck=jsonObject.getString("ischeck"); String updatetime=jsonObject.getString("updatetime"); String codenumber=jsonObject.getString("codenumber"); out.print("<h2>快递订单信息</h2><table border=\"1\" cellspacing=\"0\" cellpadding=\"0\"><tr>"+ "<th>快递单号</th><th>是否签收</th><th>更新时间</th>"+ "</tr><tr>"+ "<td>"+codenumber+"</td>"+ "<td>"+(ischeck.equals("1")?"已签收":"未签收")+"</td>"+ "<td>"+updatetime+"</td>"+ "</tr></table><br/>"); out.print("<h2>快递运送信息</h2><table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">" + "<tr><th>状态</th><th>时间</th></tr>"); JSONArray dataList=jsonObject.getJSONArray("data"); for (int j = 0; j < dataList.length(); j++) { JSONObject dataObject=dataList.getJSONObject(j); String context=dataObject.getString("context"); String ftime=dataObject.getString("ftime"); out.print("<tr><td>"+context+"</td>"+ "<td>"+ftime+"</td>"+ "</tr>"); } out.print("</table></center></body></html>"); } catch (Exception e) { e.printStackTrace(); } }else{ out.print("<font color='red'><b>快递公司名称或订单号不存在!请查证后再次查询</b></font>"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } /** * post 方式 * @param type * @param postid * @return String * */ public static String postHttp(String type,String postid){ String responseMsg=""; //1.构造HttpClient的实例 HttpClient httpClient=new HttpClient(); httpClient.getParams().setContentCharset("utf-8"); String url="http://www.kuaidi100.com/query"; //2.构造PostMethodd的实例 PostMethod postMethod=new PostMethod(url); //3.把参数值放入到PostMethod对象中 postMethod.addParameter("type",type); postMethod.addParameter("postid",postid); try { //4.执行postMethod,调用http接口 httpClient.executeMethod(postMethod);//200 //5.读取内容 responseMsg = postMethod.getResponseBodyAsString(); //6.处理返回的内容 log.info(responseMsg); } catch (Exception e) { e.printStackTrace(); }finally{ //7.释放连接 postMethod.releaseConnection(); } return responseMsg; } }运行我们的项目,搜索韵达的一个单子(之前自己买桌子时的订单),结果:
至此,我们利用httpClient获取了网络上的第三方数据接口来完成了一个快递查询服务。目前比较火爆的移动互联网中,愈来愈多的微信公众号、微网站和手机App,都采用了第三方数据接口来提供一些常见的数据服务,例如天气查询、手机归属地查询、每日笑话、股票走势等等......学会合理利用网络资源,就会使开发的应用功能更丰富,吸引更多的用户。
彩蛋:
一个包含许多免费数据服务接口的地址集合(天气预报、手机归属地等等...):
http://www.bejson.com/knownjson/webInterface/
转载请注明出处:http://blog.csdn.net/acmman/article/details/51839525
相关文章推荐
- Android开源项目xUtils HttpUtils模块分析(转)
- 网易视频云:直播端网络QoS算法总结和技术展望
- 网易页面的网络爬虫,获取网易页面的所有文本信息
- 【HttpClient学习与实战】1.使用httpClient实现get与post信息传输
- iOS Http请求获取响应头文件 与添加头文件
- 人工神经网络中的activation function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function?
- What is the difference between SSL, TLS, and HTTPS?
- http常用状态码说明
- 处理HTTP响应(响应码、响应头、请求重定向、自动刷新/跳转)
- tomcat 增加https安全协议访问
- 网络编程之HttpClient
- 网络编程之HttpURLConnection
- Centos7 最小化安装出现无法使用网络的问题
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- 自己实现HTTP协议
- HTTP android 4.0 找不到相关包
- Android监听网络状态变化与WIFI移动网的判别
- CloudDB——构建云化网络统一融合数据层
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Te
- Apache与Nginx网络模型