12306java
『壹』 請教java嘗試模擬登錄12306時遇到的一個問題
首先12306網站前綴為「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 [email protected]
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的人太多了,現在學Java還好找工作嗎
互聯網行業是一個高速運轉的行業,我們這個時代可以說是一個互聯網的時代,不知不覺,你會發現,一切行業和事物都能和網路沾上邊。作為IT開發中一直打持久戰的職業,現在學Java還好找工作嗎?
Java工程師在中國已經存在多年,雖然發展市場廣闊,企業對Java開發人才的需求量非常大,但是我國的Java開發人才依然稀缺。根據職友集數據顯示,北京、上海、深圳、杭州、廣州等一線城市Java招聘需求量均過萬,其中北京達到了48021個職位,上海達到了30332個職位,人才需求量非常大。並且全國Java平均工資:¥ 12330/月,隨著工作年限的增加,工資也是一漲再漲。
所以說目前學Java還是比較有前途的。
據專家預計,2019年,我國Java專業人才將達百萬缺口,培養Java人才是當務之急。Java工程師無疑是互聯網時代開發行業的中流砥柱,優厚的薪資待遇也吸引著很多人去學習。
互聯網發展帶動軟體行業的發展,Java開發也隨之迅速發展,並得到了良好的市場回應;國家政策不斷助力Java開發工程師相關行業的發展,國家提供大力度經濟扶持,工信部等八部委投資4000億元建設基站。
Java語言簡單易學,Java 技術的特點是卓越的通用性、高效性、平台移植性和安全性,Java語言開發程序比較方便,可以輕松實現很多強大的功能,擁有全球最大的開發者專業社群,還可以撰寫跨平台應用軟體的面向對象的程序設計語言。
Java語言廣泛應用於PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,受到各個行業的歡迎。
整體來說,Java工程師的就業形勢依然大好。很多學習Java技能提升的年輕人,經過自己的努力都能輕松拿到8K左右的月薪,甚至破萬。很多人經過幾年的積累,月薪能達到2W以上。有些人也在後期轉行升職架構、成為技術大牛等,年薪非常豐厚。