仿12306查询火车票功能

首先感谢http://www.zuidaima.com/share/1861712958622720.html对我的帮助,我在此基础上修改了页面的显示,

先上效果吧

public class SearchTrainController implements X509TrustManager
{

	private static String QUERY_RUL = "https://kyfw.12306.cn/otn/lcxxcx/query";

	@RequestMapping(value = "searchTrain", method = RequestMethod.POST)
	public
	@ResponseBody String  searchTrain(HttpServletRequest request/**, HttpServletResponse response, PrintWriter pw*/)
	{
		StringBuffer sb = new StringBuffer();
		String from_Station = request.getParameter("fromStationText");
		String to_station = request.getParameter("toStationText");
		String queryDate = request.getParameter("train_start_date");
		String purpose_codes = request.getParameter("purpose_codes");
		try
		{
			TrustManager[] tm = { new MyX509TrustManager() };
			SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
			sslContext.init(null, tm, new java.security.SecureRandom());
			SSLSocketFactory ssf = sslContext.getSocketFactory();
			String param = "?purpose_codes=" + purpose_codes + "&queryDate=" + queryDate + "&from_station=" + from_Station + "&to_station=" + to_station;
			System.out.println("URL:"+QUERY_RUL + param);
			URL url = new URL(QUERY_RUL + param);
			HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
			con.setSSLSocketFactory(ssf);
			InputStreamReader in = new InputStreamReader(con.getInputStream(), "utf-8");
			BufferedReader bfreader = new BufferedReader(in);
			String line = "";
			while ((line = bfreader.readLine()) != null)
			{
				sb.append(line);
			}
			//System.out.println(sb.toString());
		}
		catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return sb.toString();
	}

	@Override
	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException
	{
		// TODO Auto-generated method stub
	}

	@Override
	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException
	{
		// TODO Auto-generated method stub
	}

	@Override
	public X509Certificate[] getAcceptedIssuers()
	{
		// TODO Auto-generated method stub
		return null;
	}
}

接下来是我本地写的一个测试类

public class JunitTest {
	public static void main(String[] args) throws Exception {
		TrustManager[] tm = { new MyX509TrustManager() };
		SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
		sslContext.init(null, tm, new java.security.SecureRandom());
		SSLSocketFactory ssf = sslContext.getSocketFactory();
		String urlStr = "https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-06-06&from_station=BXP&to_station=WHN";
		URL url = new URL(urlStr);
		HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
		con.setSSLSocketFactory(ssf);
		InputStreamReader in = new InputStreamReader(con.getInputStream(),
				"utf-8");
		BufferedReader bfreader = new BufferedReader(in);
		StringBuffer sb = new StringBuffer();
		String line = "";
		while ((line = bfreader.readLine()) != null) {
			sb.append(line);
		}
		System.out.println(sb.toString());
	}
}

这里请求的是12306官网的,这里的请求可能会有token会话,有其他问题的,欢迎留言,主要是练习下。

网站代码:https://github.com/xiangzhihong/12306

需要源码的加群哦:278792776

时间: 2024-10-12 19:54:39

仿12306查询火车票功能的相关文章

夺命雷公狗---javascript NO:27 通过json调用12306查询车次信息

出发地:广州 目的地:北京 查询 收费接口:数据聚合 http://www.juhe.cn/ 注册账号,申请12306接口 进入控制应用里面里面有一个 应用名称:  12306API 调用数据:   12306火车票查询 appkey:  XXXXXXXXXXXXXXXXX(因为这里是收费的) 应用包: 接口文档:(可以点击进入里面进行查阅接口该如何设置的) 网站左方有一个4.12306订票①:查询车次 里面有详细的传参方式 定义查询页面 示例: <!DOCTYPE html> <htm

03微信公众平台 - 实现【天气查询】功能函数,返回一个文本字符串。

一.功能代码函数实现 private function _weather($city) { include("weather_cityId.php"); $c_name=$weather_cityId[$city]; if(!empty($c_name)){ $json=file_get_contents("http://m.weather.com.cn/data/".$c_name.".html"); $data = json_decode($

DataUml Design 介绍9 - DataUML 1.3版本功能(查询分析器功能等)

DataUML 1.3 (下载)主要更新内容如下: 1.增加查询分析器功能: 2.增加打开历史文件记录功能: 3.修改查询对象功能: 4.增加显示对象长度功能: 5.增加配置显示表字段功能: 6.增加快速定位对象功能: 一.查询分析器功能 支持多种数据库的查询,能够执行SQL语句进行查询数据和操作数据.如下图: 1.点击"打开"可以打开一个SQL文件: 2.点击"新建查询"按钮新建一个查询分析器,可以选择数据源进行查询数据: 3.点击"执行"可以

基于“MVC”框架集设计模式,利用 DBHelper实现查询数据库功能

利用 DBHelper实现查询数据库功能 (1)连接好mysql数据库,如果无法连接,先打开mysql服务.新建一个数据库,名字为text,在新建一个数据表,名字为user,添加三个字段:用户ID.用户名和密码. (2)新建 web 项目UserManager,根据MVC模型的设计,建立四个包:beans.DAO.DBHelper.servlet.将所需要的DBHelper导入新建Web项目的DBHelper中,注意要使数据库名字保持一致.将mysql-connector-java-5.1.24

MySQL中间件之ProxySQL(9):ProxySQL的查询缓存功能

返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html ProxySQL支持查询缓存的功能,可以将后端返回的结果集缓存在自己的内存中,在某查询的缓存条目被清理(例如过期)之前,前端再发起同样的查询语句,将直接从缓存中取数据并返回给前端.如此一来,ProxySQL处理的性能会大幅提升,也会大幅减轻后端MySQL Server的压力. 1.开启query cache功能 ProxySQL的查询缓存功能由mysql_query_

poscms基于list标签实现的查询分页功能

poscms系统本身有一个在查询页(search页面)实现的查询分页功能,基于系统封装的php函数dr_search_url() 但是今天的需求除了导航栏.列表页.详情页都实现查询功能外,关键是有两个不同的模块,模块不同,如果用 系统的search的话,那就得弄两个search页面出来,其实搜索结果页面完全就是照搬列表页,所以,我为什么不 直接用列表页作为模板呢,不去走系统的search控制器.下面上列表页: 1.筛选条件的获取以及查询页的路径拼接 <div class="paixu&qu

Symfony3 查询搜索功能DQL语句like查询

//前台页面代码 <form method="GET" action="{{ path('staff_index') }}" name="searchterm"> <label> <input name="searchterm" type="text" value="" placeholder="输入名称" > </label

Android学习之仿QQ側滑功能的实现

如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的Android Swipe Layout要好一点,至于为何好,以下我给大家实验一下大家就知道了 老规矩.贴上效果图.这样大家才干更近距离的了解 这是代码家的效果图,效果非常多,支持listview.gridview,当然recylerview也是支持的. 可是呢,有个问题,代码家的效果非常多.可是我们

hbase的查询scan功能注意点(setStartRow, setStopRow)

来自http://hi.baidu.com/7636553/blog/item/982beb17713bc004972b43ee.html hbase的scan查询功能注意项: Scan scan = new Scan(); scan.setStartRow(“5193:”); scan.setStopRow(“5194:”); ResultScanner result = table.getScanner(scan); for (Result r : result) { get it.....