java 12306 模拟登陆_请教java尝试模拟登录12306时遇到的一个问题
展开全部
首先12306网站前32313133353236313431303231363533e78988e69d8331333363386133缀为“https://” 表明是用SSL加密。
用HttpClient去模拟发送请求时,对于URL用为“https”时,先要解决证书问题,有两种解决方案:
在查找相关资料时,对于这种方法有点麻烦,最后就没有去尝试,有兴趣的朋友可以试试
扩展HttpClient 类实现自动接受证书,因为这种方法自动接收所有证书,因此存在一定的安全问题,所以在使用这种方法前请仔细考虑您的系统的安全需求。
具体的步骤如下:
•提供一个自定义的socket factory (test.MySecureProtocolSocketFactory )。这个自定义的类必须实现接口
org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory ,在实现接口的类中调用自定义的
X509TrustManager(test.MyX509TrustManager)
•创建一个org.apache.commons.httpclient.protocol.Protocol 的实例,指定协议名称和默认的端口号
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);
•注册刚才创建的https 协议对象
Protocol.registerProtocol("https ", myhttps);
具体代码如下:
1 package org.study.meteor.ticket.util;
2
3 import java.io.IOException;
4 import java.net.InetAddress;
5 import java.net.InetSocketAddress;
6 import java.net.Socket;
7 import java.net.SocketAddress;
8 import java.net.UnknownHostException;
9 import java.security.KeyManagementException;
10 import java.security.NoSuchAlgorithmException;
11 import java.security.cert.CertificateException;
12 import java.security.cert.X509Certificate;
13
14 import javax.net.SocketFactory;
15 import javax.net.ssl.SSLContext;
16 import javax.net.ssl.TrustManager;
17 import javax.net.ssl.X509TrustManager;
18
19 import org.apache.commons.httpclient.ConnectTimeoutException;
20 import org.apache.commons.httpclient.params.HttpConnectionParams;
21 import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
22
23 /**
24 * MySecureProtocolSocketFactory.java.java Create on 2012-9-26下午1:15:03
25 *
26 *
27 * Copyright (c) 2012 by MTA.
28 *
29 * @author lmeteor
30 * @Email txin0814@sina.com
31 * @description 自定义的socket factory 实现自动接受证书
32 * @version 1.0
33 */
34 public class MySecureProtocolSocketFactory implements
35 SecureProtocolSocketFactory
36 {
37
38 private SSLContext sslcontext = null;
39
40 private SSLContext createSSLContext()
41 {
42 SSLContext sslcontext = null;
43 try
44 {
45 sslcontext = SSLContext.getInstance("SSL");
46 sslcontext.init(null, new TrustManager[]
47 { new TrustAnyTrustManager() }, new java.security.SecureRandom());
48 }
49 catch (NoSuchAlgorithmException e)
50 {
51 e.printStackTrace();
52 }
53 catch (KeyManagementException e)
54 {
55 e.printStackTrace();
56 }
57 return sslcontext;
58 }
59
60 private SSLContext getSSLContext()
61 {
62 if (this.sslcontext == null)
63 {
64 this.sslcontext = createSSLContext();
65 }
66 return this.sslcontext;
67 }
68
69 public Socket createSocket(Socket socket, String host, int port,
70 boolean autoClose) throws IOException, UnknownHostException
71 {
72 return getSSLContext().getSocketFactory().createSocket(socket, host,
73 port, autoClose);
74 }
75
76 public Socket createSocket(String host, int port) throws IOException,
77 UnknownHostException
78 {
79 return getSSLContext().getSocketFactory().createSocket(host, port);
80 }
81
82 public Socket createSocket(String host, int port, InetAddress clientHost,
83 int clientPort) throws IOException, UnknownHostException
84 {
85 return getSSLContext().getSocketFactory().createSocket(host, port,
86 clientHost, clientPort);
87 }
88
89 public Socket createSocket(String host, int port, InetAddress localAddress,
90 int localPort, HttpConnectionParams params) throws IOException,
91 UnknownHostException, ConnectTimeoutException
92 {
93 if (params == null)
94 {
95 throw new IllegalArgumentException("Parameters may not be null");
96 }
97 int timeout = params.getConnectionTimeout();
98 SocketFactory socketfactory = getSSLContext().getSocketFactory();
99 if (timeout == 0)
100 {
101 return socketfactory.createSocket(host, port, localAddress,
102 localPort);
103 }
104 else
105 {
106 Socket socket = socketfactory.createSocket();
107 SocketAddress localaddr = new InetSocketAddress(localAddress,
108 localPort);
109 SocketAddress remoteaddr = new InetSocketAddress(host, port);
110 socket.bind(localaddr);
111 socket.connect(remoteaddr, timeout);
112 return socket;
113 }
114 }
115
116 // 自定义私有类
117 private static class TrustAnyTrustManager implements X509TrustManager
118 {
119
120 public void checkClientTrusted(X509Certificate[] chain, String authType)
121 throws CertificateException
122 {
123 }
124
125 public void checkServerTrusted(X509Certificate[] chain, String authType)
126 throws CertificateException
127 {
128 }
129
130 public X509Certificate[] getAcceptedIssuers()
131 {
132 return new X509Certificate[]
133 {};
134 }
135 }
136 }
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
java 12306 模拟登陆_请教java尝试模拟登录12306时遇到的一个问题相关推荐
- java单终端登陆_配置终端服务单一登录
配置终端服务单一登录 配置终端服务单一登录 单一登录是一种身份验证方法,允许具有域帐户的用户使用密码或智能卡登录一次,然后,不再要求其提供凭据即可访问远程服务器. 若要在终端服务中实现单一登录功能,请 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java模拟登录百度_模拟登陆百度的Java实现
常常需要爬取百度统计出来的数据,难免要进行百度的模拟登陆!现将程序贴出来,供他人也供自己以后使用: ? ? package org.baidu; import java.util.List; impo ...
- java 写字板源代码_基于JAVA的模拟写字板的设计与实现(含录像)
基于的模拟写字板的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文18800字,程序代码,答辩PPT,答辩视频录像) 摘要 目前,很多新的技术领域都涉及到了Java语言,Java ...
- java程序设计模拟题_《Java程序设计》东师模拟题题目及答案
<Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...
- 二级java模拟软件_二级JAVA超级模拟软件
无忧考吧二级JAVA超级模拟软件是无忧考吧为计算机的广大考生们推出的一款计算机二级java语言考试模拟的软件,用户通过模拟可以快速找出自己的不足,可以更好的进行复习,让你在考试中更加稳定的通过! 基本 ...
- java 最后的异常_关于java:异常处理尝试没有catch,但最后
本问题已经有最佳答案,请猛点这里访问. public class ExceptionTest { public static void main(String[] args) { ExceptionT ...
- java浮点运算很难_关于Java:浮点运算不能产生精确结果
本问题已经有最佳答案,请猛点这里访问. 我需要在Java中做一些浮点运算,如下面的代码所示: public class TestMain { private static Map ccc = new ...
- java case 的错误_关于java:switch case语句错误:case表达式必须是常量表达式
我的switch-case语句昨天运行得很好. 但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么 ...
最新文章
- 画图说明Java String的不变性!可修改字符串不要轻易使用String!
- AngularJS 深入理解 $scope 转载▼
- tensorflow随笔-读取多个文件
- Cow Toll Paths(floyd变形)
- stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计
- 列表、字典补充点、strJoin方法、set()集合、和深浅拷贝
- hdu5106 小于x的数(二进制1确定的数)的和 数位dp(first mine)
- 微信开发 ---- 设置服务器配置
- java page 分页_自己整理写的java分页工具条pageUtil
- 《分布式系统原理与范型》习题答案 5.同步
- 飞思卡尔磁力计MAG3110 快速上手指南
- 已知二叉树的前序序列跟中序序列求后序序列(C语言)
- 怎样设计一个好的社交网站
- biu Vue2高级知识点
- 黑帽SEO之技巧篇【认准SEO黑帽大神】
- html中怎么写一个简单的tab,html中的tab功能如何实现?
- 文本话题聚类(Kmeans/LDA)
- 前端特效、js代码优化
- SVM实战之垃圾邮件过滤
- Java培训出来,好找工作吗?