HttpClient 访问https来

一、首先了解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\n");
		    out.write("Host: kyfw.12306.cn\r\n");  // 请求头,Host是必须的  
		    out.write("User-Agent: Mozilla/5.0 (Windows NT 6.1; IE 9.0)\r\n"); //请求的机器信息
		    out.write("\r\n");
		    out.flush();
		    System.out.println("start   work!");
		    String line;
		    StringBuffer sb = new StringBuffer();
		    while ((line = in.readLine()) != null) {
		      sb.append(line + "\n");
		    }
		    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的使用

四、使用

不仅可以用来访问认证

也可以用来进行跨域的转发

 

 

 

 


 

转载于:https://my.oschina.net/findurl/blog/366087

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值