【HttpClient学习与实战】2.使用httpclient实现快递查询网站

news/2024/5/14 13:18:04/文章来源:https://blog.csdn.net/u013517797/article/details/51839525
上一次我们自己编写了一个数据接口,并且使用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"

效果:


接下来我们就在上次我们创建的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_785753.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信-网站 会员整合流程(会员同步登陆)

认证了的服务号&#xff0c;可以实现用户点击微信3x5菜单&#xff0c;跳转到自己微网站&#xff0c;并实现用户自动登录的功能&#xff0c;即可以将微信粉丝与网站用户进行关联&#xff0c;把微信粉丝转换为网站会员。本文只描述大概的接入流程&#xff0c;具体实现代码因不同应…

网站运行状态检测工具

背景&#xff1a; 作为站长&#xff0c;想随时都能关注到自己的网站运行情况&#xff0c;当网站出现异常时&#xff0c;往往需要第一时间知道并进行处理。 此工具即实现定时对网站进行检测&#xff0c;确定其是否能正常访问。 方案&#xff1a; 源码下载 备用地址

ASP.NET MVC3书店--第十节 为网站导航与局部设计做最后的修改

现在我们已经完成了这个网站中的主要功能。但我们还需要为整个网站的导航&#xff0c;首页与书籍列表页面做一点最终的修改。 10.1 创建购物摘要分部视图 首先&#xff0c;我们想要在整个网站中显示用户购物车中的书籍数量&#xff0c;如图10-1所示。 图10-1 在整个网站中显…

常用的软件、网站

前言 整理一下可能常常会使用的软件和服务平台&#xff0c;顺序不分先后 1.编辑类软件 MacDown&#xff1a;要写简历了&#xff0c;要用了&#xff0c;哈哈&#xff0c;平时上传到github的内容也可以现在MacDown上写好&#xff0c;再粘贴到github上传印象笔记&#xff1a;平时记…

夺命雷公狗ThinkPHP项目之----企业网站12之文章添加的实现

我们现在就开始写文章添加了&#xff0c;居然是添加当然布列外&#xff0c;我们还是要先讲模版搞定再说被&#xff1a; <!doctype html> <html> <head><meta charset"UTF-8"><title>后台管理</title><link rel"styleshe…

大电商网站导航用户体验对比

最近挺感兴趣研究电子商务网站的导航&#xff0c;特地找6个网站做横向对比四个综合性大站 http://www.360buy.com/ http://dangdang.com/ http://www.suning.cn/ http://shop.qq.com/ 两个垂直电商站点 http://www.letao.com/ http://www.mbaobao.com/ 先上截图&#xff1a; 京…

【Docker学习总结】7.Docker在容器中部署静态网站

上一篇我们介绍了Docker守护式容器的启动方式&#xff0c;本篇我们来学习如何在Docker容器中部署静态网站。 这里我们将在Docker容器中使用Nginx搭建一个静态网站&#xff0c;通过这个部署&#xff0c;让大家对在前几节中学到的Docker容器知识&#xff0c;有进一步的熟悉和理解…

中文网php怎样盈利维持,如何保持网站稳定的排名?

1、保持网站排名稳定&#xff0c;需要高权重的相关外链想要网站排名长期稳定靠前&#xff0c;外链是重中之重&#xff0c;seo就是这么简单&#xff0c;成&#xff0c;外链&#xff1b;败&#xff0c;外链。所以&#xff0c;要想稳定住排名&#xff0c;网站必须拥有强大的高权重…

linux php搭建网站,linux 搭建php网站许愿墙(示例代码)

首先需要搭建本地yum源&#xff0c;详情参考&#xff1a;我使用Centos 7 做网站服务器&#xff0c;Centos 5 存放数据先配置centos 7配置IPvi /etc/sysconfig/network-scripts/ifcfg-eno16777736 #编辑网卡配置文件&#xff0c;eno16777736为网卡名字我Centos 7设置的I…

Linux运维学习网站收藏

Linux运维之道 1> http://www.linuxidc.com/ //Linux公社&#xff0c;收藏Linux学习的很多知识 2> http://http://www.jb51.net/ //脚本之家&#xff0c;许多脚本基本知识网站 3> http://www.runoob.com/ //记录IT、运维各个方面的一些基础笔记 4> h…

网站会员扫码充值系统

一、简介 微信会员充值系统&#xff0c;适合游戏及第三方平台充值。 二、主要功能 1. 会员支付&#xff1a;填写会员名及金额后&#xff0c;弹出二维码&#xff0c;会员扫码后充值。 2. 支付查询&#xff1a;输入订单号&#xff0c;可以查询订单金额。 3. 接口充值&#xff1a;…

美国购物网站排名

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;http://www.cnblogs.com/zijinguang/archive…

www packtpub com电子书网站

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;www.packtpub.com支持信用卡支付&#xff0c…

一步步构建大型网站架构

一步步构建大型网站架构 原创 2016-04-17 itivy 架构师联盟之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构…

10个高质量PPT模板下载网站

1.PPTSTORE http://www.pptstore.net/ 中国顶级原创PPT模板和KEYNOTE模板下载的高端平台-PPTSTORE 设计师在这里可以发布自己的作品&#xff0c;用户也可以付费下载。里边免费板块的PPT模板质量也还是非常高的&#xff0c;但需要个人花点心思筛选自己要的模板。 2.officePLUS h…

我是如何对网站CSS进行架构的 转自张鑫旭

一、写在前面的 都是自己积累形成的一些东西&#xff0c;可能带有明显的个人印记。不是专业内容&#xff0c;不是权威指南&#xff0c;只是展示一点自己的观点&#xff0c;借此希望能与各位优秀的同行交流看法&#xff0c;见解。以得到进步与提高。 二、我所知的一些过往的做法…

Requests电商网站爬虫+SQLAlchemy框架数据入库

知识点&#xff1a; 1、SQLAqlalchemy框架的使用&#xff0c;数据库连接&#xff0c;建立表格&#xff0c;数据入库Mysqll等操作。 2、解决重复入库问题 3、图片元素变动的反爬应对 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative…

Scrapy+Mysql+SqlAlchemy爬取招聘网站信息

爬虫目的&#xff1a; 爬取拉勾网站杭州分站的python岗位基本信息和岗位详情&#xff0c;并写入mysql数据库。后附经验总结。 知识点&#xff0c; 1、解析函数多个yield以及多个pipeline的使用 2、Sqlalchemy框架的使用 3、Scrapy FormRequest请求&#xff0c;以及反爬 难点…

Python爬取招聘网站岗位信息

本代码主要实现从招聘网站爬取所有招聘某个特定岗位的公司信息&#xff0c;如公司名&#xff0c;岗位&#xff0c;公司规模&#xff0c;招聘详情页信息&#xff0c;并写入csv文件。难点是获取请求的url地址和参数。 在智联主页搜索销售岗位&#xff0c;Chrome浏览器打开网页&a…

OneinStack定时同步备份数据库/网站至七牛云存储方法

无论我们用WEB面板&#xff0c;还是用一键脚本安装环境建站&#xff0c;只要一旦我们开始用VPS、服务器&#xff0c;最为关键的就是服务器中的数据。因为大部分VPS、服务器商家都是无管理型主机&#xff0c;任何的安装和维护都需要我们自行管理。即便商家因自身问题导致服务器故…