java抓取数据包查询12306余票信息
最近项目比较闲,闲来无事,参照网上的代码实现了一下抓取12306数据包查询余票的代码,
需要的jar包需要全部包含到项目下,代码测试OK,具体代码如下:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TestTmp {
/**
* @params args
* @return void
*/
public static void main(String[] args) throws Exception {
//运行该代码前需要生成证书文件放到jre的security目录下,具体操作参照
//http://blog.csdn.net/faye0412/article/details/6883879/
//站点库代码参照:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
String trainDate = "2016-11-30";
String fromStation ="XAY";
String toStation = "SHH";
getHttp(trainDate,fromStation,toStation);
}
/**
* @param trainDate 乘车日期
* @param fromStation 起点站代码
* @param toStation 终点站代码
* @return void 无
* @author liuyong
* @serialData 2016年11月30日12:55:58
*/
public static void getHttp(String trainDate,String fromStation,String toStation) throws Exception {
JSONObject jsonObject = null;
JSONArray jsonArray = null;
URL reqURL = new URL(
"https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date="+trainDate+"&leftTicketDTO.from_station="+fromStation+"&leftTicketDTO.to_station="+toStation+"&purpose_codes=ADULT"); //
HttpsURLConnection httpsConn = (HttpsURLConnection) reqURL.openConnection();
InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream());
String jsonstring = "";
int respInt = insr.read();
while (respInt != -1) {
jsonstring += String.valueOf((char) respInt);
//System.out.print(((char) respInt));
respInt = insr.read();
}
jsonObject = JSONObject.fromObject(jsonstring);
//System.out.println(formatJson(jsonstring));
//System.out.println(jsonObject.get("data"));
jsonArray = JSONArray.fromObject(jsonObject.get("data"));
for(int i = 0 ; i < jsonArray.size(); i++){
JSONObject tmpJsonBoj = jsonArray.getJSONObject(i);
JSONObject finalJsonObj = (JSONObject) tmpJsonBoj.get("queryLeftNewDTO");
String trainCode = finalJsonObj.getString("station_train_code");
String startStation = finalJsonObj.getString("from_station_name");
String endStation = finalJsonObj.getString("to_station_name");
String satrtTime = finalJsonObj.getString("start_time");
String arrivalTime = finalJsonObj.getString("arrive_time");
String lishi= finalJsonObj.getString("lishi");
String canWebBuy = finalJsonObj.getString("canWebBuy");
//System.out.print("车次:" + trainCode);
System.out.printf("车次:");
System.out.printf("%-6s",trainCode);
System.out.printf("出发站:");
System.out.printf("%-10s",startStation);
System.out.printf("终点站:");
System.out.printf("%-10s",endStation);
System.out.printf("出发时间:");
System.out.printf("%-6s",satrtTime);
System.out.printf("到达时间:");
System.out.printf("%-6s",arrivalTime);
System.out.printf("历时:");
System.out.printf("%-6s",lishi);
System.out.printf("是否网购:");
System.out.printf("%-4s",canWebBuy);
System.out.println();
//剩下输出信息根据需要自己找吧
}
}
/**
* 格式化json字符串,参照别人的代码,暂时没有用到
* @param jsonStr
* @return
* @author
* @Date
*/
public static String formatJson(String jsonStr) {
if (null == jsonStr || "".equals(jsonStr)) return "";
StringBuilder sb = new StringBuilder();
char last = '\0';
char current = '\0';
int indent = 0;
for (int i = 0; i < jsonStr.length(); i++) {
last = current;
current = jsonStr.charAt(i);
switch (current) {
case '{':
case '[':
sb.append(current);
sb.append('\n');
indent++;
addIndentBlank(sb, indent);
break;
case '}':
case ']':
sb.append('\n');
indent--;
addIndentBlank(sb, indent);
sb.append(current);
break;
case ',':
sb.append(current);
if (last != '\\') {
sb.append('\n');
addIndentBlank(sb, indent);
}
break;
default:
sb.append(current);
}
}
return sb.toString();
}
/**
* 添加space
* @param
* @param
* @author
* @Date
*/
private static void addIndentBlank(StringBuilder sb, int indent) {
for (int i = 0; i < indent; i++) {
sb.append('\t');
}
}
}
java抓取数据包查询12306余票信息相关推荐
- Python爬虫学习(七)执行定时任务爬取12306余票信息发送邮件通知
分析 我们输入的上海,北京都变成了对应的编号,比如,上海(SHH).北京(BJP),所以当我们程序进行输入的时候要进行一下处理,12306的一个地方存储着这些城市名与编码对应的文档: GET请求: h ...
- python怎么编写wireshark抓的包_使用Wireshark 抓取数据包
Wireshark 是一个网络封包分析软件.网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换. 一 ...
- libpcap抓取数据包
libpcap是数据包捕获函数库.该库提供的C函数接口可用于需要捕获经过网络接口数据包的系统开发上.libpcap提供的接口函数主要实现和封装了与数据包截获有关的过程.这个库为不同的平台提供了一致的编 ...
- 夜神模拟器抓取数据包
学习记录 & 以及为需要的人节约时间 1.拿到burp 的证书文件, 2.使用kali 自带的openssl 对证书进行处理 openssl x509 -inform DER -in cace ...
- wireshark设置端口镜像_H3C交换机端口镜像,抓取数据包wireshark实战
端口镜像 system-vies //进入配置模式 用户名:admin 密码:admin(默认) [H3C] dis cu int 查看所有端口的配置 [H3C] mirroring-gro ...
- Java获取12306余票信息(二)
接上 前面我们说到如何用Firefox浏览器抓取数据,并 对json进行了分析,下面就是用Java代码来进行操作.以下代码都没有导入包,有需要自行导入 Java获取12306余票信息(一) Java获 ...
- Java获取12306余票信息(一)
写在前面 写给自己,也分享给大家. Java获取12306余票信息(一) Java获取12306余票信息(二) Java获取12306余票信息(三) 步骤: 首先找找12306的API 1.打开谷歌浏 ...
- 使用Wireshark抓取数据包
1.通过wireshark官网下载:https://www.wireshark.org/ 2.设置捕获过滤器 打开wireshark,菜单–>捕获–>捕获过滤器(F),如图1 在捕获过滤器 ...
- (二)、Python查询12306余票:联网查询余票信息并解析
前一篇–>实现始发站.终点站和出发日期的合法性检验 以下如果有的变量不明白说明在前面的文章已经介绍了,切记! 首先我们来看看每查询一条信息12306网站返回的信息: 请求链接: https:// ...
最新文章
- element select 自动展开_原生js 让select下拉框自动展开 可用size 属性来代替展开动作...
- 泛化 实现 组合 聚合 关联 依赖
- 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
- shell 脚本 进行sqlite3初始化
- jqgrid本地数据例子_微型数据转换器如何通过更小尺寸为您带来更多价值
- cs go linux游戏吧,玩家分享:让CSGO画面变成舒服的暖色调
- 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据
- jquery如何拿到一个对象_jQuery 怎么获取对象
- JSK-17 X的平方根【二分法】
- linux 下idea 启动tomcat报JMX 1099错误解决办法
- ios模拟器安装证书
- matlab二维正弦曲线
- QQ文件自动接收 重命名 建立文件夹 官方内测版本
- html添加鼠标右键菜单,Fabric.js - 添加鼠标右键点击事件响应(附:右键菜单)...
- Unity打包篇:关于MMD模型贴画在安卓手机上无法显示的问题。
- beeline登录配置
- python输出时怎么保留两位小数_python输出怎么保留两位小数-Python教程
- 教你怎么制作高大上的三维热力图
- 通过PhoneStateListener实现Android电话监听
- 【调剂】郑州大学河南先进技术研究院2022年硕士研究生招生拟调剂信息公告
热门文章
- 议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!
- 读书笔记:如何阅读一本书
- Forming a Magic Square
- Python——报错:WindowsError:[Error 1(...)](WindowsError错误码解释)
- 浮点数美丽的表象(为什么要慎用浮点数)
- 有了这个Python库,再也不愁给孩子起名字了
- 苹果研发柔性玻璃,iOS升级证件识别
- Cocos2d python
- iOS - 获取设备标识符UUID/UDID/IMEI等
- PHP关于实现腾讯云直播的推流和拉流