展开全部

首先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时遇到的一个问题相关推荐

  1. java单终端登陆_配置终端服务单一登录

    配置终端服务单一登录 配置终端服务单一登录 单一登录是一种身份验证方法,允许具有域帐户的用户使用密码或智能卡登录一次,然后,不再要求其提供凭据即可访问远程服务器. 若要在终端服务中实现单一登录功能,请 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java模拟登录百度_模拟登陆百度的Java实现

    常常需要爬取百度统计出来的数据,难免要进行百度的模拟登陆!现将程序贴出来,供他人也供自己以后使用: ? ? package org.baidu; import java.util.List; impo ...

  4. java 写字板源代码_基于JAVA的模拟写字板的设计与实现(含录像)

    基于的模拟写字板的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文18800字,程序代码,答辩PPT,答辩视频录像) 摘要 目前,很多新的技术领域都涉及到了Java语言,Java ...

  5. java程序设计模拟题_《Java程序设计》东师模拟题题目及答案

    <Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...

  6. 二级java模拟软件_二级JAVA超级模拟软件

    无忧考吧二级JAVA超级模拟软件是无忧考吧为计算机的广大考生们推出的一款计算机二级java语言考试模拟的软件,用户通过模拟可以快速找出自己的不足,可以更好的进行复习,让你在考试中更加稳定的通过! 基本 ...

  7. java 最后的异常_关于java:异常处理尝试没有catch,但最后

    本问题已经有最佳答案,请猛点这里访问. public class ExceptionTest { public static void main(String[] args) { ExceptionT ...

  8. java浮点运算很难_关于Java:浮点运算不能产生精确结果

    本问题已经有最佳答案,请猛点这里访问. 我需要在Java中做一些浮点运算,如下面的代码所示: public class TestMain { private static Map ccc = new ...

  9. java case 的错误_关于java:switch case语句错误:case表达式必须是常量表达式

    我的switch-case语句昨天运行得很好. 但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么 ...

最新文章

  1. 画图说明Java String的不变性!可修改字符串不要轻易使用String!
  2. AngularJS 深入理解 $scope 转载▼
  3. tensorflow随笔-读取多个文件
  4. Cow Toll Paths(floyd变形)
  5. stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计
  6. 列表、字典补充点、strJoin方法、set()集合、和深浅拷贝
  7. hdu5106 小于x的数(二进制1确定的数)的和 数位dp(first mine)
  8. 微信开发 ---- 设置服务器配置
  9. java page 分页_自己整理写的java分页工具条pageUtil
  10. 《分布式系统原理与范型》习题答案 5.同步
  11. 飞思卡尔磁力计MAG3110 快速上手指南
  12. 已知二叉树的前序序列跟中序序列求后序序列(C语言)
  13. 怎样设计一个好的社交网站
  14. biu Vue2高级知识点
  15. 黑帽SEO之技巧篇【认准SEO黑帽大神】
  16. html中怎么写一个简单的tab,html中的tab功能如何实现?
  17. 文本话题聚类(Kmeans/LDA)
  18. 前端特效、js代码优化
  19. SVM实战之垃圾邮件过滤
  20. Java培训出来,好找工作吗?

热门文章

  1. 彻彻底底删除卸载docker
  2. 宝藏又小众的线条免抠元素素材网站分享
  3. 关于 蓝桥杯 打印六芒星 的 另类方法
  4. 你好好想想,你真的需要配置中心吗?
  5. telnet查看远程端口
  6. 欲穷千里目, 更上一层楼
  7. android修改apk的图标及名称
  8. 【转】转载:易中天讲的很有哲理的十句话
  9. 【HDU 2512】第二类斯特林数
  10. Android 编译流程解析03-手动编译Apk