HttpClientがhttpsを訪問してきます。

3905 ワード

一、まずhttp契約を理解する。
1.socket.  GET要求
		Socket socket = new Socket("www.baidu.com", 80);    
		//        
		OutputStream out = socket.getOutputStream();  
		PrintWriter pw = new PrintWriter(out);  
		pw.println("GET / HTTP/1.1");  //       Request-Line,  
		pw.println("Host: www.baidu.com");  //    ,Host      
		pw.println("User-Agent: Mozilla/5.0 (Windows NT 6.1; IE 9.0)"); //       
		//
		//pw.println("Content-Type: application/x-www-form-urlencoded");
		pw.println();//         
		pw.flush();  //       
		//          
		InputStream is = socket.getInputStream();
		InputStreamReader reader = new InputStreamReader(is);
		    
		//           
		while (true) {
			System.out.print((char)reader.read());
		}
2.socket POSTの時のパラメータはこれはまだ確定していません。
pw.println("Content-Type: application/x-www-form-urlencoded");
pw.println("Content-Length: length
pw.println();
pw.println("---------------"); //
3.SSL/TLS HTTPS
 SSL/TLSプロトコルを説明する
   //        
		    X509TrustManager xtm = new DefaultTrustManager();
		    TrustManager mytm[] = { xtm };
		    //      
		    SSLContext ctx = SSLContext.getInstance("SSL");
		    //    
		    ctx.init(null, mytm, null);
		    //     
		    SSLSocketFactory factory = ctx.getSocketFactory();
		    //      Socket  
//		    String url="https://kyfw.12306.cn/otn/leftTicket/init";
		    Socket socket = factory.createSocket("kyfw.12306.cn", 443);
		    //         Socket     

		    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

		    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

		    out.write("GET /otn/leftTicket/init HTTP/1.1\r
"); out.write("Host: kyfw.12306.cn\r
"); // ,Host out.write("User-Agent: Mozilla/5.0 (Windows NT 6.1; IE 9.0)\r
"); // out.write("\r
"); out.flush(); System.out.println("start work!"); String line; StringBuffer sb = new StringBuffer(); while ((line = in.readLine()) != null) { sb.append(line + "
"); } out.close(); in.close(); System.out.println(sb.toString());
 
まず次のHttpClientに来ます。
1.3.0のHttpClientを探しましたが、4の感じはまだ使えません。とりあえずこのようにしましょう。
2.基本的なget用法効果
public static void main(String[] args) {
     HttpClient client=new HttpClient();
     int result=0;
     try {
//     GetMethod get=new GetMethod("http://www.baidu.com");
//		int result=client.executeMethod(get);
//		System.out.println("    :"+result);
		
    	GetMethod get=new GetMethod("https://kyfw.12306.cn/otn/leftTicket/init");
		result=client.executeMethod(get);
		System.out.println("    :"+result);
	} catch (IOException e) {
		e.printStackTrace();
	}
この中には大体二つの問題があります。
1.通常のhttpにアクセスできるようになりました。
  ちょっとhttps://github.com/  なんと200にも戻りました。この下に解决します。
2.上記のようなhttpsアクセスは直接異常です。
3.httpclient訪問
 三、証明書の
証明書の原理
証明書チェーン
 最終的には証明書は第三者公認の機関で買いに行きます。
実際のところを知る
 
//                  
class DefaultTrustManager implements X509TrustManager{

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

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

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

          ,         
 
SSLSOcketの使用
四、使用する
認証にアクセスするだけでなく
クロスドメイン転送にも使用できます。